Specify the tissue of interest, run the boilerplate code which sets up the functions and environment, load the tissue object.

tissue_of_interest = "Heart"
library(here)
source(here("00_data_ingest", "02_tissue_analysis_rmd", "boilerplate.R"))
load_tissue_facs(tissue_of_interest)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
[1] "Scaling data matrix"

  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |===                                                                             |   4%
  |                                                                                      
  |=======                                                                         |   8%
  |                                                                                      
  |==========                                                                      |  12%
  |                                                                                      
  |=============                                                                   |  17%
  |                                                                                      
  |=================                                                               |  21%
  |                                                                                      
  |====================                                                            |  25%
  |                                                                                      
  |=======================                                                         |  29%
  |                                                                                      
  |===========================                                                     |  33%
  |                                                                                      
  |==============================                                                  |  38%
  |                                                                                      
  |=================================                                               |  42%
  |                                                                                      
  |=====================================                                           |  46%
  |                                                                                      
  |========================================                                        |  50%
  |                                                                                      
  |===========================================                                     |  54%
  |                                                                                      
  |===============================================                                 |  58%
  |                                                                                      
  |==================================================                              |  62%
  |                                                                                      
  |=====================================================                           |  67%
  |                                                                                      
  |=========================================================                       |  71%
  |                                                                                      
  |============================================================                    |  75%
  |                                                                                      
  |===============================================================                 |  79%
  |                                                                                      
  |===================================================================             |  83%
  |                                                                                      
  |======================================================================          |  88%
  |                                                                                      
  |=========================================================================       |  92%
  |                                                                                      
  |=============================================================================   |  96%
  |                                                                                      
  |================================================================================| 100%
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
TEXT_SHOW_BACKTRACE environmental variable.
An object of class seurat in project Heart 
 23341 genes across 4365 samples.

Visualize top genes in principal components

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = tiss)

Choose the number of principal components to use.

# Set number of principal components. 
n.pcs = 10

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

For the top-level clustering, aim to under-cluster instead of over-cluster. It will be easy to subset groups and further analyze them below.

# Set resolution 
res.used <- 0.5

tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=30)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T)

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

table(tiss@ident)

  0   1   2   3   4   5   6   7   8   9  10  11 
993 894 620 545 398 326 221 182 143 131  80  52 

Which markers identify a specific cluster?

clust.markers <- FindMarkers(object = tiss, ident.1 = 0, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~53s          
   |++                                                | 2 % ~51s          
   |++                                                | 3 % ~51s          
   |+++                                               | 4 % ~50s          
   |+++                                               | 5 % ~49s          
   |++++                                              | 6 % ~49s          
   |++++                                              | 7 % ~48s          
   |+++++                                             | 9 % ~48s          
   |+++++                                             | 10% ~47s          
   |++++++                                            | 11% ~47s          
   |++++++                                            | 12% ~46s          
   |+++++++                                           | 13% ~46s          
   |+++++++                                           | 14% ~45s          
   |++++++++                                          | 15% ~45s          
   |++++++++                                          | 16% ~44s          
   |+++++++++                                         | 17% ~44s          
   |++++++++++                                        | 18% ~43s          
   |++++++++++                                        | 19% ~43s          
   |+++++++++++                                       | 20% ~42s          
   |+++++++++++                                       | 21% ~19m 50s      
   |++++++++++++                                      | 22% ~18m 41s      
   |++++++++++++                                      | 23% ~17m 37s      
   |+++++++++++++                                     | 24% ~16m 39s      
   |+++++++++++++                                     | 26% ~15m 46s      
   |++++++++++++++                                    | 27% ~14m 57s      
   |++++++++++++++                                    | 28% ~14m 11s      
   |+++++++++++++++                                   | 29% ~13m 29s      
   |+++++++++++++++                                   | 30% ~12m 50s      
   |++++++++++++++++                                  | 31% ~12m 13s      
   |++++++++++++++++                                  | 32% ~11m 39s      
   |+++++++++++++++++                                 | 33% ~11m 07s      
   |++++++++++++++++++                                | 34% ~10m 37s      
   |++++++++++++++++++                                | 35% ~10m 09s      
   |+++++++++++++++++++                               | 36% ~09m 42s      
   |+++++++++++++++++++                               | 37% ~09m 17s      
   |++++++++++++++++++++                              | 38% ~08m 54s      
   |++++++++++++++++++++                              | 39% ~08m 31s      
   |+++++++++++++++++++++                             | 40% ~08m 10s      
   |+++++++++++++++++++++                             | 41% ~07m 49s      
   |++++++++++++++++++++++                            | 43% ~07m 30s      
   |++++++++++++++++++++++                            | 44% ~07m 12s      
   |+++++++++++++++++++++++                           | 45% ~06m 54s      
   |+++++++++++++++++++++++                           | 46% ~06m 38s      
   |++++++++++++++++++++++++                          | 47% ~06m 22s      
   |++++++++++++++++++++++++                          | 48% ~06m 06s      
   |+++++++++++++++++++++++++                         | 49% ~05m 51s      
   |+++++++++++++++++++++++++                         | 50% ~05m 37s      
   |++++++++++++++++++++++++++                        | 51% ~05m 24s      
   |+++++++++++++++++++++++++++                       | 52% ~05m 11s      
   |+++++++++++++++++++++++++++                       | 53% ~04m 58s      
   |++++++++++++++++++++++++++++                      | 54% ~04m 46s      
   |++++++++++++++++++++++++++++                      | 55% ~04m 35s      
   |+++++++++++++++++++++++++++++                     | 56% ~04m 24s      
   |+++++++++++++++++++++++++++++                     | 57% ~04m 13s      
   |++++++++++++++++++++++++++++++                    | 59% ~04m 02s      
   |++++++++++++++++++++++++++++++                    | 60% ~03m 52s      
   |+++++++++++++++++++++++++++++++                   | 61% ~03m 43s      
   |+++++++++++++++++++++++++++++++                   | 62% ~03m 33s      
   |++++++++++++++++++++++++++++++++                  | 63% ~03m 24s      
   |++++++++++++++++++++++++++++++++                  | 64% ~03m 15s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~03m 07s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~02m 59s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 50s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~02m 43s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 35s      
   |++++++++++++++++++++++++++++++++++++              | 70% ~02m 28s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 21s      
   |+++++++++++++++++++++++++++++++++++++             | 72% ~02m 14s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02m 07s      
   |++++++++++++++++++++++++++++++++++++++            | 74% ~02m 00s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 54s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 47s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 41s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 35s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 30s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 24s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 18s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 13s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01m 08s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 02s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~57s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~52s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~47s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~43s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~38s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~29s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~25s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 06m 04s
print(x = head(x= clust.markers, n = 10))

You can also compute all markers for all clusters at once. This may take some time.

tiss.markers <- FindAllMarkers(object = tiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~50s          
   |+                                                 | 2 % ~48s          
   |++                                                | 3 % ~47s          
   |++                                                | 4 % ~46s          
   |+++                                               | 5 % ~46s          
   |+++                                               | 6 % ~46s          
   |++++                                              | 7 % ~45s          
   |++++                                              | 8 % ~45s          
   |+++++                                             | 9 % ~44s          
   |+++++                                             | 10% ~44s          
   |++++++                                            | 11% ~44s          
   |++++++                                            | 12% ~43s          
   |+++++++                                           | 13% ~43s          
   |+++++++                                           | 14% ~42s          
   |++++++++                                          | 15% ~42s          
   |++++++++                                          | 16% ~42s          
   |+++++++++                                         | 17% ~41s          
   |+++++++++                                         | 18% ~42s          
   |++++++++++                                        | 19% ~41s          
   |++++++++++                                        | 20% ~41s          
   |+++++++++++                                       | 21% ~40s          
   |+++++++++++                                       | 22% ~40s          
   |++++++++++++                                      | 23% ~39s          
   |++++++++++++                                      | 24% ~39s          
   |+++++++++++++                                     | 25% ~38s          
   |+++++++++++++                                     | 26% ~37s          
   |++++++++++++++                                    | 27% ~37s          
   |++++++++++++++                                    | 28% ~36s          
   |+++++++++++++++                                   | 29% ~36s          
   |+++++++++++++++                                   | 30% ~35s          
   |++++++++++++++++                                  | 31% ~34s          
   |++++++++++++++++                                  | 32% ~34s          
   |+++++++++++++++++                                 | 33% ~33s          
   |+++++++++++++++++                                | 34% ~33s          
   |++++++++++++++++++                                | 35% ~32s          
   |++++++++++++++++++                                | 36% ~32s          
   |+++++++++++++++++++                               | 37% ~31s          
   |+++++++++++++++++++                               | 38% ~31s          
   |++++++++++++++++++++                              | 39% ~30s          
   |++++++++++++++++++++                              | 40% ~30s          
   |+++++++++++++++++++++                             | 41% ~29s          
   |+++++++++++++++++++++                             | 42% ~29s          
   |++++++++++++++++++++++                            | 43% ~28s          
   |++++++++++++++++++++++                            | 44% ~28s          
   |+++++++++++++++++++++++                           | 45% ~27s          
   |+++++++++++++++++++++++                           | 46% ~27s          
   |++++++++++++++++++++++++                          | 47% ~26s          
   |++++++++++++++++++++++++                          | 48% ~26s          
   |+++++++++++++++++++++++++                         | 49% ~25s          
   |+++++++++++++++++++++++++                         | 50% ~25s          
   |++++++++++++++++++++++++++                        | 51% ~24s          
   |++++++++++++++++++++++++++                        | 52% ~24s          
   |+++++++++++++++++++++++++++                       | 53% ~23s          
   |+++++++++++++++++++++++++++                       | 54% ~23s          
   |++++++++++++++++++++++++++++                      | 55% ~22s          
   |++++++++++++++++++++++++++++                     | 56% ~22s          
   |+++++++++++++++++++++++++++++                     | 57% ~21s          
   |+++++++++++++++++++++++++++++                     | 58% ~21s          
   |++++++++++++++++++++++++++++++                    | 59% ~20s          
   |++++++++++++++++++++++++++++++                    | 60% ~20s          
   |+++++++++++++++++++++++++++++++                   | 61% ~19s          
   |+++++++++++++++++++++++++++++++                   | 62% ~19s          
   |++++++++++++++++++++++++++++++++                  | 63% ~18s          
   |++++++++++++++++++++++++++++++++                  | 64% ~18s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~17s          
   |++++++++++++++++++++++++++++++++++                | 67% ~16s          
   |++++++++++++++++++++++++++++++++++               | 68% ~16s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~15s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~14s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~11s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~11s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~10s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 48s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 07s      
   |++                                                | 2 % ~01m 08s      
   |++                                                | 3 % ~01m 08s      
   |+++                                               | 4 % ~01m 06s      
   |+++                                               | 5 % ~01m 05s      
   |++++                                              | 6 % ~01m 05s      
   |++++                                              | 7 % ~01m 04s      
   |+++++                                             | 9 % ~01m 03s      
   |+++++                                             | 10% ~01m 02s      
   |++++++                                            | 11% ~01m 02s      
   |++++++                                            | 12% ~01m 01s      
   |+++++++                                           | 13% ~01m 00s      
   |+++++++                                           | 14% ~59s          
   |++++++++                                          | 15% ~59s          
   |++++++++                                          | 16% ~58s          
   |+++++++++                                         | 17% ~58s          
   |++++++++++                                        | 18% ~57s          
   |++++++++++                                        | 19% ~56s          
   |+++++++++++                                       | 20% ~55s          
   |+++++++++++                                       | 21% ~55s          
   |++++++++++++                                      | 22% ~54s          
   |++++++++++++                                      | 23% ~53s          
   |+++++++++++++                                     | 24% ~52s          
   |+++++++++++++                                     | 26% ~52s          
   |++++++++++++++                                    | 27% ~51s          
   |++++++++++++++                                    | 28% ~50s          
   |+++++++++++++++                                   | 29% ~49s          
   |+++++++++++++++                                   | 30% ~49s          
   |++++++++++++++++                                  | 31% ~48s          
   |++++++++++++++++                                  | 32% ~47s          
   |+++++++++++++++++                                 | 33% ~46s          
   |++++++++++++++++++                                | 34% ~46s          
   |++++++++++++++++++                                | 35% ~45s          
   |+++++++++++++++++++                               | 36% ~44s          
   |+++++++++++++++++++                               | 37% ~43s          
   |++++++++++++++++++++                              | 38% ~43s          
   |++++++++++++++++++++                              | 39% ~42s          
   |+++++++++++++++++++++                             | 40% ~41s          
   |+++++++++++++++++++++                             | 41% ~40s          
   |++++++++++++++++++++++                            | 43% ~40s          
   |++++++++++++++++++++++                            | 44% ~39s          
   |+++++++++++++++++++++++                           | 45% ~38s          
   |+++++++++++++++++++++++                           | 46% ~38s          
   |++++++++++++++++++++++++                          | 47% ~37s          
   |++++++++++++++++++++++++                          | 48% ~36s          
   |+++++++++++++++++++++++++                         | 49% ~35s          
   |+++++++++++++++++++++++++                         | 50% ~35s          
   |++++++++++++++++++++++++++                        | 51% ~34s          
   |+++++++++++++++++++++++++++                       | 52% ~33s          
   |+++++++++++++++++++++++++++                       | 53% ~32s          
   |++++++++++++++++++++++++++++                      | 54% ~32s          
   |++++++++++++++++++++++++++++                      | 55% ~31s          
   |+++++++++++++++++++++++++++++                     | 56% ~30s          
   |+++++++++++++++++++++++++++++                     | 57% ~29s          
   |++++++++++++++++++++++++++++++                    | 59% ~29s          
   |++++++++++++++++++++++++++++++                    | 60% ~28s          
   |+++++++++++++++++++++++++++++++                   | 61% ~27s          
   |+++++++++++++++++++++++++++++++                   | 62% ~27s          
   |++++++++++++++++++++++++++++++++                  | 63% ~26s          
   |++++++++++++++++++++++++++++++++                  | 64% ~25s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~24s          
   |++++++++++++++++++++++++++++++++++                | 67% ~23s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~22s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~21s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~21s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~20s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~19s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~17s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~16s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~16s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~15s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 09s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~41s          
   |++                                                | 2 % ~40s          
   |++                                                | 3 % ~40s          
   |+++                                               | 4 % ~39s          
   |+++                                               | 5 % ~38s          
   |++++                                              | 6 % ~38s          
   |++++                                              | 7 % ~37s          
   |+++++                                             | 9 % ~37s          
   |+++++                                             | 10% ~36s          
   |++++++                                            | 11% ~36s          
   |++++++                                            | 12% ~36s          
   |+++++++                                           | 13% ~35s          
   |+++++++                                           | 14% ~34s          
   |++++++++                                          | 15% ~34s          
   |++++++++                                          | 16% ~34s          
   |+++++++++                                         | 17% ~33s          
   |++++++++++                                        | 18% ~33s          
   |++++++++++                                        | 19% ~32s          
   |+++++++++++                                       | 20% ~32s          
   |+++++++++++                                       | 21% ~31s          
   |++++++++++++                                      | 22% ~31s          
   |++++++++++++                                      | 23% ~30s          
   |+++++++++++++                                     | 24% ~30s          
   |+++++++++++++                                     | 26% ~30s          
   |++++++++++++++                                    | 27% ~29s          
   |++++++++++++++                                    | 28% ~29s          
   |+++++++++++++++                                   | 29% ~29s          
   |+++++++++++++++                                   | 30% ~28s          
   |++++++++++++++++                                  | 31% ~28s          
   |++++++++++++++++                                  | 32% ~27s          
   |+++++++++++++++++                                 | 33% ~27s          
   |++++++++++++++++++                                | 34% ~26s          
   |++++++++++++++++++                                | 35% ~26s          
   |+++++++++++++++++++                               | 36% ~26s          
   |+++++++++++++++++++                               | 37% ~25s          
   |++++++++++++++++++++                              | 38% ~25s          
   |++++++++++++++++++++                              | 39% ~24s          
   |+++++++++++++++++++++                             | 40% ~24s          
   |+++++++++++++++++++++                             | 41% ~23s          
   |++++++++++++++++++++++                            | 43% ~23s          
   |++++++++++++++++++++++                            | 44% ~23s          
   |+++++++++++++++++++++++                           | 45% ~22s          
   |+++++++++++++++++++++++                           | 46% ~22s          
   |++++++++++++++++++++++++                          | 47% ~21s          
   |++++++++++++++++++++++++                          | 48% ~21s          
   |+++++++++++++++++++++++++                         | 49% ~20s          
   |+++++++++++++++++++++++++                         | 50% ~20s          
   |++++++++++++++++++++++++++                        | 51% ~20s          
   |+++++++++++++++++++++++++++                       | 52% ~19s          
   |+++++++++++++++++++++++++++                       | 53% ~19s          
   |++++++++++++++++++++++++++++                      | 54% ~18s          
   |++++++++++++++++++++++++++++                      | 55% ~18s          
   |+++++++++++++++++++++++++++++                     | 56% ~17s          
   |+++++++++++++++++++++++++++++                     | 57% ~17s          
   |++++++++++++++++++++++++++++++                    | 59% ~17s          
   |++++++++++++++++++++++++++++++                    | 60% ~16s          
   |+++++++++++++++++++++++++++++++                   | 61% ~16s          
   |+++++++++++++++++++++++++++++++                   | 62% ~15s          
   |++++++++++++++++++++++++++++++++                  | 63% ~15s          
   |++++++++++++++++++++++++++++++++                  | 64% ~14s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~14s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~14s          
   |++++++++++++++++++++++++++++++++++                | 67% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~11s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~11s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~10s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~09s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~09s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 39s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~37s          
   |++                                                | 2 % ~37s          
   |++                                                | 3 % ~36s          
   |+++                                               | 4 % ~37s          
   |+++                                               | 5 % ~37s          
   |++++                                              | 6 % ~37s          
   |++++                                              | 7 % ~36s          
   |+++++                                             | 9 % ~36s          
   |+++++                                             | 10% ~35s          
   |++++++                                            | 11% ~35s          
   |++++++                                            | 12% ~34s          
   |+++++++                                           | 13% ~34s          
   |+++++++                                           | 14% ~34s          
   |++++++++                                          | 15% ~33s          
   |++++++++                                          | 16% ~33s          
   |+++++++++                                         | 17% ~32s          
   |++++++++++                                        | 18% ~32s          
   |++++++++++                                        | 19% ~31s          
   |+++++++++++                                       | 20% ~31s          
   |+++++++++++                                       | 21% ~31s          
   |++++++++++++                                      | 22% ~30s          
   |++++++++++++                                      | 23% ~30s          
   |+++++++++++++                                     | 24% ~30s          
   |+++++++++++++                                     | 26% ~29s          
   |++++++++++++++                                    | 27% ~29s          
   |++++++++++++++                                    | 28% ~29s          
   |+++++++++++++++                                   | 29% ~28s          
   |+++++++++++++++                                   | 30% ~28s          
   |++++++++++++++++                                  | 31% ~27s          
   |++++++++++++++++                                  | 32% ~27s          
   |+++++++++++++++++                                 | 33% ~26s          
   |++++++++++++++++++                                | 34% ~26s          
   |++++++++++++++++++                                | 35% ~26s          
   |+++++++++++++++++++                               | 36% ~25s          
   |+++++++++++++++++++                               | 37% ~25s          
   |++++++++++++++++++++                              | 38% ~24s          
   |++++++++++++++++++++                              | 39% ~24s          
   |+++++++++++++++++++++                             | 40% ~23s          
   |+++++++++++++++++++++                             | 41% ~23s          
   |++++++++++++++++++++++                            | 43% ~23s          
   |++++++++++++++++++++++                            | 44% ~22s          
   |+++++++++++++++++++++++                           | 45% ~22s          
   |+++++++++++++++++++++++                           | 46% ~21s          
   |++++++++++++++++++++++++                          | 47% ~21s          
   |++++++++++++++++++++++++                          | 48% ~21s          
   |+++++++++++++++++++++++++                         | 49% ~20s          
   |+++++++++++++++++++++++++                         | 50% ~20s          
   |++++++++++++++++++++++++++                        | 51% ~19s          
   |+++++++++++++++++++++++++++                       | 52% ~19s          
   |+++++++++++++++++++++++++++                       | 53% ~18s          
   |++++++++++++++++++++++++++++                      | 54% ~18s          
   |++++++++++++++++++++++++++++                      | 55% ~18s          
   |+++++++++++++++++++++++++++++                     | 56% ~17s          
   |+++++++++++++++++++++++++++++                     | 57% ~17s          
   |++++++++++++++++++++++++++++++                    | 59% ~16s          
   |++++++++++++++++++++++++++++++                    | 60% ~16s          
   |+++++++++++++++++++++++++++++++                   | 61% ~16s          
   |+++++++++++++++++++++++++++++++                   | 62% ~15s          
   |++++++++++++++++++++++++++++++++                  | 63% ~15s          
   |++++++++++++++++++++++++++++++++                  | 64% ~14s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~14s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~13s          
   |++++++++++++++++++++++++++++++++++                | 67% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~11s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~11s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~10s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~10s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~09s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~09s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 39s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 22s      
   |++                                                | 2 % ~01m 20s      
   |++                                                | 3 % ~01m 21s      
   |+++                                               | 4 % ~01m 21s      
   |+++                                               | 5 % ~01m 19s      
   |++++                                              | 6 % ~01m 18s      
   |++++                                              | 7 % ~01m 18s      
   |+++++                                             | 8 % ~01m 17s      
   |+++++                                             | 9 % ~01m 16s      
   |++++++                                            | 10% ~01m 16s      
   |++++++                                            | 11% ~01m 16s      
   |+++++++                                           | 12% ~01m 15s      
   |+++++++                                           | 13% ~01m 14s      
   |++++++++                                          | 14% ~01m 13s      
   |++++++++                                          | 15% ~01m 12s      
   |+++++++++                                         | 16% ~01m 11s      
   |+++++++++                                         | 18% ~01m 10s      
   |++++++++++                                        | 19% ~01m 09s      
   |++++++++++                                        | 20% ~01m 08s      
   |+++++++++++                                       | 21% ~01m 07s      
   |+++++++++++                                       | 22% ~01m 07s      
   |++++++++++++                                      | 23% ~01m 06s      
   |++++++++++++                                      | 24% ~01m 05s      
   |+++++++++++++                                     | 25% ~01m 04s      
   |+++++++++++++                                     | 26% ~01m 03s      
   |++++++++++++++                                    | 27% ~01m 02s      
   |++++++++++++++                                    | 28% ~01m 01s      
   |+++++++++++++++                                   | 29% ~01m 00s      
   |+++++++++++++++                                   | 30% ~60s          
   |++++++++++++++++                                  | 31% ~59s          
   |++++++++++++++++                                  | 32% ~58s          
   |+++++++++++++++++                                 | 33% ~57s          
   |++++++++++++++++++                                | 34% ~56s          
   |++++++++++++++++++                                | 35% ~55s          
   |+++++++++++++++++++                               | 36% ~54s          
   |+++++++++++++++++++                               | 37% ~53s          
   |++++++++++++++++++++                              | 38% ~52s          
   |++++++++++++++++++++                              | 39% ~52s          
   |+++++++++++++++++++++                             | 40% ~51s          
   |+++++++++++++++++++++                             | 41% ~50s          
   |++++++++++++++++++++++                            | 42% ~49s          
   |++++++++++++++++++++++                            | 43% ~48s          
   |+++++++++++++++++++++++                           | 44% ~47s          
   |+++++++++++++++++++++++                           | 45% ~46s          
   |++++++++++++++++++++++++                          | 46% ~45s          
   |++++++++++++++++++++++++                          | 47% ~45s          
   |+++++++++++++++++++++++++                         | 48% ~44s          
   |+++++++++++++++++++++++++                         | 49% ~43s          
   |++++++++++++++++++++++++++                        | 51% ~42s          
   |++++++++++++++++++++++++++                        | 52% ~41s          
   |+++++++++++++++++++++++++++                       | 53% ~40s          
   |+++++++++++++++++++++++++++                       | 54% ~39s          
   |++++++++++++++++++++++++++++                      | 55% ~39s          
   |++++++++++++++++++++++++++++                      | 56% ~38s          
   |+++++++++++++++++++++++++++++                     | 57% ~37s          
   |+++++++++++++++++++++++++++++                     | 58% ~36s          
   |++++++++++++++++++++++++++++++                    | 59% ~35s          
   |++++++++++++++++++++++++++++++                    | 60% ~34s          
   |+++++++++++++++++++++++++++++++                   | 61% ~33s          
   |+++++++++++++++++++++++++++++++                   | 62% ~32s          
   |++++++++++++++++++++++++++++++++                  | 63% ~32s          
   |++++++++++++++++++++++++++++++++                  | 64% ~31s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~30s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~29s          
   |++++++++++++++++++++++++++++++++++                | 67% ~28s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~27s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~26s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~25s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~25s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~24s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~23s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~22s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~21s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~20s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~19s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~18s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 24s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~59s          
   |++                                                | 2 % ~59s          
   |++                                                | 3 % ~57s          
   |+++                                               | 4 % ~55s          
   |+++                                               | 5 % ~54s          
   |++++                                              | 6 % ~54s          
   |++++                                              | 7 % ~54s          
   |+++++                                             | 9 % ~54s          
   |+++++                                             | 10% ~53s          
   |++++++                                            | 11% ~53s          
   |++++++                                            | 12% ~52s          
   |+++++++                                           | 13% ~52s          
   |+++++++                                           | 14% ~51s          
   |++++++++                                          | 15% ~50s          
   |++++++++                                          | 16% ~49s          
   |+++++++++                                         | 17% ~49s          
   |++++++++++                                        | 18% ~48s          
   |++++++++++                                        | 19% ~48s          
   |+++++++++++                                       | 20% ~47s          
   |+++++++++++                                       | 21% ~46s          
   |++++++++++++                                      | 22% ~46s          
   |++++++++++++                                      | 23% ~45s          
   |+++++++++++++                                     | 24% ~44s          
   |+++++++++++++                                     | 26% ~44s          
   |++++++++++++++                                    | 27% ~43s          
   |++++++++++++++                                    | 28% ~42s          
   |+++++++++++++++                                   | 29% ~42s          
   |+++++++++++++++                                   | 30% ~41s          
   |++++++++++++++++                                  | 31% ~40s          
   |++++++++++++++++                                  | 32% ~40s          
   |+++++++++++++++++                                 | 33% ~39s          
   |++++++++++++++++++                                | 34% ~39s          
   |++++++++++++++++++                                | 35% ~38s          
   |+++++++++++++++++++                               | 36% ~37s          
   |+++++++++++++++++++                               | 37% ~37s          
   |++++++++++++++++++++                              | 38% ~36s          
   |++++++++++++++++++++                              | 39% ~35s          
   |+++++++++++++++++++++                             | 40% ~35s          
   |+++++++++++++++++++++                             | 41% ~34s          
   |++++++++++++++++++++++                            | 43% ~33s          
   |++++++++++++++++++++++                            | 44% ~33s          
   |+++++++++++++++++++++++                           | 45% ~32s          
   |+++++++++++++++++++++++                           | 46% ~32s          
   |++++++++++++++++++++++++                          | 47% ~31s          
   |++++++++++++++++++++++++                          | 48% ~30s          
   |+++++++++++++++++++++++++                         | 49% ~30s          
   |+++++++++++++++++++++++++                         | 50% ~29s          
   |++++++++++++++++++++++++++                        | 51% ~29s          
   |+++++++++++++++++++++++++++                       | 52% ~28s          
   |+++++++++++++++++++++++++++                       | 53% ~27s          
   |++++++++++++++++++++++++++++                      | 54% ~27s          
   |++++++++++++++++++++++++++++                      | 55% ~26s          
   |+++++++++++++++++++++++++++++                     | 56% ~25s          
   |+++++++++++++++++++++++++++++                     | 57% ~25s          
   |++++++++++++++++++++++++++++++                    | 59% ~24s          
   |++++++++++++++++++++++++++++++                    | 60% ~24s          
   |+++++++++++++++++++++++++++++++                   | 61% ~23s          
   |+++++++++++++++++++++++++++++++                   | 62% ~22s          
   |++++++++++++++++++++++++++++++++                  | 63% ~22s          
   |++++++++++++++++++++++++++++++++                  | 64% ~21s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~20s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~20s          
   |++++++++++++++++++++++++++++++++++                | 67% ~19s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~19s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~18s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~17s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~16s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~16s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~15s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~14s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~14s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~13s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 58s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 04s      
   |++                                                | 2 % ~01m 04s      
   |++                                                | 3 % ~01m 04s      
   |+++                                               | 4 % ~01m 02s      
   |+++                                               | 5 % ~01m 01s      
   |++++                                              | 6 % ~60s          
   |++++                                              | 7 % ~60s          
   |+++++                                             | 8 % ~59s          
   |+++++                                             | 9 % ~59s          
   |++++++                                            | 10% ~58s          
   |++++++                                            | 11% ~57s          
   |+++++++                                           | 12% ~57s          
   |+++++++                                           | 13% ~56s          
   |++++++++                                          | 14% ~55s          
   |++++++++                                          | 15% ~54s          
   |+++++++++                                         | 16% ~54s          
   |+++++++++                                         | 18% ~53s          
   |++++++++++                                        | 19% ~53s          
   |++++++++++                                        | 20% ~52s          
   |+++++++++++                                       | 21% ~52s          
   |+++++++++++                                       | 22% ~51s          
   |++++++++++++                                      | 23% ~50s          
   |++++++++++++                                      | 24% ~50s          
   |+++++++++++++                                     | 25% ~49s          
   |+++++++++++++                                     | 26% ~48s          
   |++++++++++++++                                    | 27% ~48s          
   |++++++++++++++                                    | 28% ~47s          
   |+++++++++++++++                                   | 29% ~46s          
   |+++++++++++++++                                   | 30% ~46s          
   |++++++++++++++++                                  | 31% ~45s          
   |++++++++++++++++                                  | 32% ~44s          
   |+++++++++++++++++                                 | 33% ~44s          
   |++++++++++++++++++                                | 34% ~43s          
   |++++++++++++++++++                                | 35% ~42s          
   |+++++++++++++++++++                               | 36% ~42s          
   |+++++++++++++++++++                               | 37% ~41s          
   |++++++++++++++++++++                              | 38% ~40s          
   |++++++++++++++++++++                              | 39% ~40s          
   |+++++++++++++++++++++                             | 40% ~39s          
   |+++++++++++++++++++++                             | 41% ~38s          
   |++++++++++++++++++++++                            | 42% ~38s          
   |++++++++++++++++++++++                            | 43% ~37s          
   |+++++++++++++++++++++++                           | 44% ~36s          
   |+++++++++++++++++++++++                           | 45% ~36s          
   |++++++++++++++++++++++++                          | 46% ~35s          
   |++++++++++++++++++++++++                          | 47% ~34s          
   |+++++++++++++++++++++++++                         | 48% ~34s          
   |+++++++++++++++++++++++++                         | 49% ~33s          
   |++++++++++++++++++++++++++                        | 51% ~32s          
   |++++++++++++++++++++++++++                        | 52% ~32s          
   |+++++++++++++++++++++++++++                       | 53% ~31s          
   |+++++++++++++++++++++++++++                       | 54% ~30s          
   |++++++++++++++++++++++++++++                      | 55% ~30s          
   |++++++++++++++++++++++++++++                      | 56% ~29s          
   |+++++++++++++++++++++++++++++                     | 57% ~28s          
   |+++++++++++++++++++++++++++++                     | 58% ~28s          
   |++++++++++++++++++++++++++++++                    | 59% ~27s          
   |++++++++++++++++++++++++++++++                    | 60% ~26s          
   |+++++++++++++++++++++++++++++++                   | 61% ~26s          
   |+++++++++++++++++++++++++++++++                   | 62% ~25s          
   |++++++++++++++++++++++++++++++++                  | 63% ~24s          
   |++++++++++++++++++++++++++++++++                  | 64% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~23s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~22s          
   |++++++++++++++++++++++++++++++++++                | 67% ~22s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~21s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~20s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~20s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~19s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~18s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~17s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~16s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~15s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~15s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~14s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 05s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~48s          
   |++                                                | 2 % ~48s          
   |++                                                | 3 % ~48s          
   |+++                                               | 4 % ~48s          
   |+++                                               | 5 % ~48s          
   |++++                                              | 6 % ~47s          
   |++++                                              | 7 % ~46s          
   |+++++                                             | 8 % ~46s          
   |+++++                                             | 9 % ~46s          
   |++++++                                            | 10% ~46s          
   |++++++                                            | 11% ~45s          
   |+++++++                                           | 12% ~44s          
   |+++++++                                           | 13% ~44s          
   |++++++++                                          | 14% ~43s          
   |++++++++                                          | 15% ~43s          
   |+++++++++                                         | 16% ~42s          
   |+++++++++                                         | 17% ~42s          
   |++++++++++                                        | 18% ~41s          
   |++++++++++                                        | 19% ~41s          
   |+++++++++++                                       | 20% ~40s          
   |+++++++++++                                       | 21% ~40s          
   |++++++++++++                                      | 22% ~39s          
   |++++++++++++                                      | 23% ~39s          
   |+++++++++++++                                     | 24% ~38s          
   |+++++++++++++                                     | 26% ~38s          
   |++++++++++++++                                    | 27% ~37s          
   |++++++++++++++                                    | 28% ~37s          
   |+++++++++++++++                                   | 29% ~36s          
   |+++++++++++++++                                   | 30% ~36s          
   |++++++++++++++++                                  | 31% ~35s          
   |++++++++++++++++                                  | 32% ~35s          
   |+++++++++++++++++                                 | 33% ~34s          
   |+++++++++++++++++                                 | 34% ~34s          
   |++++++++++++++++++                                | 35% ~33s          
   |++++++++++++++++++                                | 36% ~33s          
   |+++++++++++++++++++                               | 37% ~32s          
   |+++++++++++++++++++                               | 38% ~32s          
   |++++++++++++++++++++                              | 39% ~31s          
   |++++++++++++++++++++                              | 40% ~31s          
   |+++++++++++++++++++++                             | 41% ~30s          
   |+++++++++++++++++++++                             | 42% ~30s          
   |++++++++++++++++++++++                            | 43% ~29s          
   |++++++++++++++++++++++                            | 44% ~28s          
   |+++++++++++++++++++++++                           | 45% ~28s          
   |+++++++++++++++++++++++                           | 46% ~27s          
   |++++++++++++++++++++++++                          | 47% ~27s          
   |++++++++++++++++++++++++                          | 48% ~26s          
   |+++++++++++++++++++++++++                         | 49% ~26s          
   |+++++++++++++++++++++++++                         | 50% ~25s          
   |++++++++++++++++++++++++++                        | 51% ~25s          
   |+++++++++++++++++++++++++++                       | 52% ~24s          
   |+++++++++++++++++++++++++++                       | 53% ~24s          
   |++++++++++++++++++++++++++++                      | 54% ~23s          
   |++++++++++++++++++++++++++++                      | 55% ~23s          
   |+++++++++++++++++++++++++++++                     | 56% ~22s          
   |+++++++++++++++++++++++++++++                     | 57% ~22s          
   |++++++++++++++++++++++++++++++                    | 58% ~21s          
   |++++++++++++++++++++++++++++++                    | 59% ~21s          
   |+++++++++++++++++++++++++++++++                   | 60% ~20s          
   |+++++++++++++++++++++++++++++++                   | 61% ~20s          
   |++++++++++++++++++++++++++++++++                  | 62% ~19s          
   |++++++++++++++++++++++++++++++++                  | 63% ~19s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~18s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~18s          
   |++++++++++++++++++++++++++++++++++                | 66% ~17s          
   |++++++++++++++++++++++++++++++++++                | 67% ~17s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~16s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~16s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~15s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~15s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~14s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~11s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~11s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 51s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 50s      
   |++                                                | 2 % ~01m 53s      
   |++                                                | 3 % ~01m 51s      
   |+++                                               | 4 % ~01m 50s      
   |+++                                               | 5 % ~01m 49s      
   |++++                                              | 6 % ~01m 48s      
   |++++                                              | 7 % ~01m 47s      
   |+++++                                             | 8 % ~01m 46s      
   |+++++                                             | 9 % ~01m 44s      
   |++++++                                            | 10% ~01m 44s      
   |++++++                                            | 11% ~01m 43s      
   |+++++++                                           | 12% ~01m 42s      
   |+++++++                                           | 13% ~01m 41s      
   |++++++++                                          | 14% ~01m 39s      
   |++++++++                                          | 15% ~01m 38s      
   |+++++++++                                         | 16% ~01m 37s      
   |+++++++++                                         | 17% ~01m 36s      
   |++++++++++                                        | 18% ~01m 34s      
   |++++++++++                                        | 19% ~01m 33s      
   |+++++++++++                                       | 20% ~01m 32s      
   |+++++++++++                                       | 21% ~01m 31s      
   |++++++++++++                                      | 22% ~01m 29s      
   |++++++++++++                                      | 23% ~01m 28s      
   |+++++++++++++                                     | 24% ~01m 27s      
   |+++++++++++++                                     | 26% ~01m 26s      
   |++++++++++++++                                    | 27% ~01m 25s      
   |++++++++++++++                                    | 28% ~01m 24s      
   |+++++++++++++++                                   | 29% ~01m 23s      
   |+++++++++++++++                                   | 30% ~01m 21s      
   |++++++++++++++++                                  | 31% ~01m 20s      
   |++++++++++++++++                                  | 32% ~01m 19s      
   |+++++++++++++++++                                 | 33% ~01m 18s      
   |+++++++++++++++++                                 | 34% ~01m 16s      
   |++++++++++++++++++                                | 35% ~01m 15s      
   |++++++++++++++++++                                | 36% ~01m 14s      
   |+++++++++++++++++++                               | 37% ~01m 13s      
   |+++++++++++++++++++                               | 38% ~01m 12s      
   |++++++++++++++++++++                              | 39% ~01m 11s      
   |++++++++++++++++++++                              | 40% ~01m 09s      
   |+++++++++++++++++++++                             | 41% ~01m 08s      
   |+++++++++++++++++++++                             | 42% ~01m 07s      
   |++++++++++++++++++++++                            | 43% ~01m 06s      
   |++++++++++++++++++++++                            | 44% ~01m 05s      
   |+++++++++++++++++++++++                           | 45% ~01m 04s      
   |+++++++++++++++++++++++                           | 46% ~01m 02s      
   |++++++++++++++++++++++++                          | 47% ~01m 01s      
   |++++++++++++++++++++++++                          | 48% ~01m 00s      
   |+++++++++++++++++++++++++                         | 49% ~59s          
   |+++++++++++++++++++++++++                         | 50% ~58s          
   |++++++++++++++++++++++++++                        | 51% ~57s          
   |+++++++++++++++++++++++++++                       | 52% ~55s          
   |+++++++++++++++++++++++++++                       | 53% ~54s          
   |++++++++++++++++++++++++++++                      | 54% ~53s          
   |++++++++++++++++++++++++++++                      | 55% ~52s          
   |+++++++++++++++++++++++++++++                     | 56% ~51s          
   |+++++++++++++++++++++++++++++                     | 57% ~50s          
   |++++++++++++++++++++++++++++++                    | 58% ~49s          
   |++++++++++++++++++++++++++++++                    | 59% ~48s          
   |+++++++++++++++++++++++++++++++                   | 60% ~47s          
   |+++++++++++++++++++++++++++++++                   | 61% ~46s          
   |++++++++++++++++++++++++++++++++                  | 62% ~45s          
   |++++++++++++++++++++++++++++++++                  | 63% ~43s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~42s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~41s          
   |++++++++++++++++++++++++++++++++++                | 66% ~40s          
   |++++++++++++++++++++++++++++++++++                | 67% ~39s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~37s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~36s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~35s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~34s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~33s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~31s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~30s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~29s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~28s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~27s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~25s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~23s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~22s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 58s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 33s      
   |++                                                | 2 % ~01m 35s      
   |++                                                | 3 % ~01m 33s      
   |+++                                               | 4 % ~01m 31s      
   |+++                                               | 5 % ~01m 30s      
   |++++                                              | 6 % ~01m 30s      
   |++++                                              | 7 % ~01m 28s      
   |+++++                                             | 8 % ~01m 28s      
   |+++++                                             | 9 % ~01m 27s      
   |++++++                                            | 10% ~01m 26s      
   |++++++                                            | 11% ~01m 26s      
   |+++++++                                           | 12% ~01m 25s      
   |+++++++                                           | 13% ~01m 24s      
   |++++++++                                          | 14% ~01m 23s      
   |++++++++                                          | 15% ~01m 22s      
   |+++++++++                                         | 16% ~01m 21s      
   |+++++++++                                         | 18% ~01m 20s      
   |++++++++++                                        | 19% ~01m 19s      
   |++++++++++                                        | 20% ~01m 18s      
   |+++++++++++                                       | 21% ~01m 17s      
   |+++++++++++                                       | 22% ~01m 16s      
   |++++++++++++                                      | 23% ~01m 15s      
   |++++++++++++                                      | 24% ~01m 13s      
   |+++++++++++++                                     | 25% ~01m 13s      
   |+++++++++++++                                     | 26% ~01m 12s      
   |++++++++++++++                                    | 27% ~01m 10s      
   |++++++++++++++                                    | 28% ~01m 10s      
   |+++++++++++++++                                   | 29% ~01m 09s      
   |+++++++++++++++                                   | 30% ~01m 08s      
   |++++++++++++++++                                  | 31% ~01m 07s      
   |++++++++++++++++                                  | 32% ~01m 06s      
   |+++++++++++++++++                                 | 33% ~01m 05s      
   |++++++++++++++++++                                | 34% ~01m 04s      
   |++++++++++++++++++                                | 35% ~01m 03s      
   |+++++++++++++++++++                               | 36% ~01m 02s      
   |+++++++++++++++++++                               | 37% ~01m 01s      
   |++++++++++++++++++++                              | 38% ~60s          
   |++++++++++++++++++++                              | 39% ~59s          
   |+++++++++++++++++++++                             | 40% ~58s          
   |+++++++++++++++++++++                             | 41% ~57s          
   |++++++++++++++++++++++                            | 42% ~56s          
   |++++++++++++++++++++++                            | 43% ~55s          
   |+++++++++++++++++++++++                           | 44% ~54s          
   |+++++++++++++++++++++++                           | 45% ~53s          
   |++++++++++++++++++++++++                          | 46% ~52s          
   |++++++++++++++++++++++++                          | 47% ~51s          
   |+++++++++++++++++++++++++                         | 48% ~50s          
   |+++++++++++++++++++++++++                         | 49% ~49s          
   |++++++++++++++++++++++++++                        | 51% ~48s          
   |++++++++++++++++++++++++++                        | 52% ~47s          
   |+++++++++++++++++++++++++++                       | 53% ~46s          
   |+++++++++++++++++++++++++++                       | 54% ~45s          
   |++++++++++++++++++++++++++++                      | 55% ~44s          
   |++++++++++++++++++++++++++++                      | 56% ~43s          
   |+++++++++++++++++++++++++++++                     | 57% ~42s          
   |+++++++++++++++++++++++++++++                     | 58% ~41s          
   |++++++++++++++++++++++++++++++                    | 59% ~40s          
   |++++++++++++++++++++++++++++++                    | 60% ~39s          
   |+++++++++++++++++++++++++++++++                   | 61% ~38s          
   |+++++++++++++++++++++++++++++++                   | 62% ~37s          
   |++++++++++++++++++++++++++++++++                  | 63% ~36s          
   |++++++++++++++++++++++++++++++++                  | 64% ~35s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~34s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~33s          
   |++++++++++++++++++++++++++++++++++                | 67% ~32s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~31s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~30s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~29s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~28s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~27s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~26s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~25s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~24s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~23s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~22s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~21s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 36s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 14s      
   |++                                                | 2 % ~01m 15s      
   |++                                                | 3 % ~01m 13s      
   |+++                                               | 4 % ~01m 11s      
   |+++                                               | 5 % ~01m 11s      
   |++++                                              | 6 % ~01m 10s      
   |++++                                              | 7 % ~01m 09s      
   |+++++                                             | 8 % ~01m 08s      
   |+++++                                             | 9 % ~01m 07s      
   |++++++                                            | 11% ~01m 07s      
   |++++++                                            | 12% ~01m 06s      
   |+++++++                                           | 13% ~01m 05s      
   |+++++++                                           | 14% ~01m 04s      
   |++++++++                                          | 15% ~01m 04s      
   |++++++++                                          | 16% ~01m 03s      
   |+++++++++                                         | 17% ~01m 02s      
   |+++++++++                                         | 18% ~01m 01s      
   |++++++++++                                        | 19% ~01m 01s      
   |++++++++++                                        | 20% ~60s          
   |+++++++++++                                       | 21% ~59s          
   |++++++++++++                                      | 22% ~58s          
   |++++++++++++                                      | 23% ~58s          
   |+++++++++++++                                     | 24% ~57s          
   |+++++++++++++                                     | 25% ~56s          
   |++++++++++++++                                    | 26% ~55s          
   |++++++++++++++                                    | 27% ~54s          
   |+++++++++++++++                                   | 28% ~53s          
   |+++++++++++++++                                   | 29% ~53s          
   |++++++++++++++++                                  | 31% ~52s          
   |++++++++++++++++                                  | 32% ~51s          
   |+++++++++++++++++                                 | 33% ~50s          
   |+++++++++++++++++                                 | 34% ~49s          
   |++++++++++++++++++                                | 35% ~49s          
   |++++++++++++++++++                                | 36% ~48s          
   |+++++++++++++++++++                               | 37% ~47s          
   |+++++++++++++++++++                               | 38% ~46s          
   |++++++++++++++++++++                              | 39% ~46s          
   |++++++++++++++++++++                              | 40% ~45s          
   |+++++++++++++++++++++                             | 41% ~44s          
   |++++++++++++++++++++++                            | 42% ~43s          
   |++++++++++++++++++++++                            | 43% ~43s          
   |+++++++++++++++++++++++                           | 44% ~42s          
   |+++++++++++++++++++++++                           | 45% ~41s          
   |++++++++++++++++++++++++                          | 46% ~40s          
   |++++++++++++++++++++++++                          | 47% ~39s          
   |+++++++++++++++++++++++++                         | 48% ~39s          
   |+++++++++++++++++++++++++                         | 49% ~38s          
   |++++++++++++++++++++++++++                        | 51% ~37s          
   |++++++++++++++++++++++++++                        | 52% ~36s          
   |+++++++++++++++++++++++++++                       | 53% ~35s          
   |+++++++++++++++++++++++++++                       | 54% ~35s          
   |++++++++++++++++++++++++++++                      | 55% ~34s          
   |++++++++++++++++++++++++++++                      | 56% ~33s          
   |+++++++++++++++++++++++++++++                     | 57% ~32s          
   |+++++++++++++++++++++++++++++                     | 58% ~32s          
   |++++++++++++++++++++++++++++++                    | 59% ~31s          
   |++++++++++++++++++++++++++++++                    | 60% ~30s          
   |+++++++++++++++++++++++++++++++                   | 61% ~29s          
   |++++++++++++++++++++++++++++++++                  | 62% ~28s          
   |++++++++++++++++++++++++++++++++                  | 63% ~28s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~27s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~26s          
   |++++++++++++++++++++++++++++++++++                | 66% ~25s          
   |++++++++++++++++++++++++++++++++++                | 67% ~24s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~24s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~23s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~22s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~21s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~21s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~20s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~19s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~18s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~17s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~17s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~16s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 14s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 50s      
   |++                                                | 2 % ~02m 47s      
   |++                                                | 3 % ~02m 45s      
   |+++                                               | 4 % ~02m 44s      
   |+++                                               | 5 % ~02m 41s      
   |++++                                              | 6 % ~02m 43s      
   |++++                                              | 7 % ~02m 40s      
   |+++++                                             | 8 % ~02m 38s      
   |+++++                                             | 9 % ~02m 36s      
   |++++++                                            | 10% ~02m 34s      
   |++++++                                            | 11% ~02m 32s      
   |+++++++                                           | 12% ~02m 30s      
   |+++++++                                           | 13% ~02m 29s      
   |++++++++                                          | 14% ~02m 27s      
   |++++++++                                          | 15% ~02m 25s      
   |+++++++++                                         | 16% ~02m 23s      
   |+++++++++                                         | 17% ~02m 22s      
   |++++++++++                                        | 18% ~02m 20s      
   |++++++++++                                        | 19% ~02m 18s      
   |+++++++++++                                       | 20% ~02m 17s      
   |+++++++++++                                       | 21% ~02m 15s      
   |++++++++++++                                      | 22% ~02m 13s      
   |++++++++++++                                      | 23% ~02m 12s      
   |+++++++++++++                                     | 24% ~02m 11s      
   |+++++++++++++                                     | 25% ~02m 10s      
   |++++++++++++++                                    | 26% ~02m 08s      
   |++++++++++++++                                    | 27% ~02m 07s      
   |+++++++++++++++                                   | 28% ~02m 05s      
   |+++++++++++++++                                   | 29% ~02m 03s      
   |++++++++++++++++                                  | 30% ~02m 01s      
   |++++++++++++++++                                  | 31% ~01m 60s      
   |+++++++++++++++++                                 | 32% ~01m 58s      
   |+++++++++++++++++                                 | 33% ~01m 56s      
   |++++++++++++++++++                                | 34% ~01m 54s      
   |++++++++++++++++++                                | 35% ~01m 52s      
   |+++++++++++++++++++                               | 36% ~01m 51s      
   |+++++++++++++++++++                               | 37% ~01m 49s      
   |++++++++++++++++++++                              | 38% ~01m 47s      
   |++++++++++++++++++++                              | 39% ~01m 45s      
   |+++++++++++++++++++++                             | 40% ~01m 43s      
   |+++++++++++++++++++++                             | 41% ~01m 42s      
   |++++++++++++++++++++++                            | 42% ~01m 40s      
   |++++++++++++++++++++++                            | 43% ~01m 38s      
   |+++++++++++++++++++++++                           | 44% ~01m 36s      
   |+++++++++++++++++++++++                           | 45% ~01m 34s      
   |++++++++++++++++++++++++                          | 46% ~01m 33s      
   |++++++++++++++++++++++++                          | 47% ~01m 31s      
   |+++++++++++++++++++++++++                         | 48% ~01m 29s      
   |+++++++++++++++++++++++++                         | 49% ~01m 27s      
   |++++++++++++++++++++++++++                        | 51% ~01m 26s      
   |++++++++++++++++++++++++++                        | 52% ~01m 24s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 22s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 20s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 19s      
   |++++++++++++++++++++++++++++                      | 56% ~01m 17s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 15s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 13s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 12s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 10s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 08s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 06s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 05s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 03s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 01s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~59s          
   |++++++++++++++++++++++++++++++++++                | 67% ~58s          
   |++++++++++++++++++++++++++++++++++                | 68% ~56s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~54s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~52s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~51s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~49s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~47s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~45s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~44s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~42s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~40s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~38s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~37s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~30s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~24s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~23s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 53s

Display the top markers you computed above.

#tiss.markers %>% group_by(cluster) %>% top_n(5, avg_diff)

Assigning cell type identity to clusters

At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:

# stash current cluster IDs
tiss <- StashIdent(object = tiss, save.name = "cluster.ids")
# enumerate current cluster IDs and the labels for them
cluster.ids <- c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11)
cell_ontology_class <-
  c(
  "fibroblast",
  "endothelial cell",
  "fibroblast",
  "fibroblast",
  "leukocyte",
  "endothelial cell",
  "smooth muscle cell",
  "endocardial cell",
  "cardiac muscle cell",
  "leukocyte",
  "endothelial cell",  
  "erythrocyte"
  )
cell_ontology_id <-
  c(
  "CL:0000057",
  "CL:0000115",
  "CL:0000057",
  "CL:0000057",
  "CL:0000738",
  "CL:0000115",
  "CL:0000192",
  "CL:0002350",
  "CL:0000746",
  "CL:0000738",
  "CL:0000115",
  "CL:0000232"
  )
tiss@meta.data[,'free_annotation'] <- NA
tiss@meta.data[,'cell_ontology_class'] <- plyr::mapvalues(x = tiss@ident, from = cluster.ids, to = cell_ontology_class)
tiss@meta.data[,'cell_ontology_id'] <- plyr::mapvalues(x = tiss@ident, from = cluster.ids, to = cell_ontology_id)
tiss@meta.data[tiss@cell.names,'cell_ontology_class'] <- as.character(tiss@meta.data$cell_ontology_class)
tiss@meta.data[tiss@cell.names,'cell_ontology_id'] <- as.character(tiss@meta.data$cell_ontology_id)
TSNEPlot(object = tiss, do.label = TRUE, pt.size = 0.5, group.by='cell_ontology_class')

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = tiss, do.return = TRUE, group.by = "plate.barcode")

Fb_3 all seem to be derived from mouse_38_F.

TSNEPlot(object = tiss, do.return = TRUE, group.by = “mouse.id”)

Edc all are derived from aorta.

TSNEPlot(object = tiss, do.return = TRUE, group.by = “subtissue”)

Print a table showing the count of cells in each identity category from each plate.

table(as.character(tiss@ident), as.character(tiss@meta.data$plate.barcode))
    
     B000412 B000633 B000634 B000636 B002010 B002011 B002421 B002423 B002427 B002428
  0       14      20      81       5      12       4      19      33     147      18
  1       58      45      24      42      39       5      77      51      42       4
  10       0       0       0       0       0       0       0       0       0       0
  11       1       1       0       3       0       0       0       0       0       0
  2        4     113      39       1     186      30       2      78      35      19
  3        2       4       0       1       8     155       2      16      51     227
  4        4      22       5       4      28       9       9      25      20       9
  5       35       3       2      23       1       2      37      32       7      11
  6        6      10       4       2       5       2       9       9       9       6
  7        1      27      22       0      27      10       4       3      14      18
  8        0       4       1       1       2       1       2       0       3       1
  9        3       4       0       3       6       2       5      13       3       2
    
     B002429 B002430 B002431 MAA000398 MAA000399 MAA000400 MAA000452 MAA000586 MAA000587
  0        4       0       0        76        26        88        47        44        23
  1       12       1      14        37        58        15        81        23        28
  10       0       0       0         0         0         0         0         0         0
  11       0       2       7         0         0         0         0         0         1
  2        1       0       0         5         1        11         2        56         0
  3        6       3      15         0         0         0         0         8         1
  4        2       0       0        20         8        13        16        36        13
  5       78       7      17         0        11         0         3         1         2
  6        7       0       0        17        13        11        14         8        12
  7        0       4       0         3         2         4         0         8         1
  8        0       0       0         2         0         1         0         2         0
  9        4       2       2         2         1         2         1        10         2
    
     MAA000589 MAA000594 MAA000595 MAA000898 MAA000899 MAA000901 MAA000903 MAA000906
  0         25        20        30         5        15        16        22         1
  1         31         0         0        12         1        33        41        29
  10         0         0         0         0         0         0         0         1
  11         0        19         0         0         0         0         1        10
  2          3         0         0         0        13         1         9         0
  3          0        19        13         1         0         0         5         2
  4         13         2         5         3         7        16        28         0
  5          9         3         0         3         0         5         4         6
  6         11         2         0         0         1         6        14         1
  7          2         0         0         0         4         2         4         1
  8          0         1         2         0         1         0         2         0
  9          1        20        10         0         1         2         7         0
    
     MAA000908 MAA000917 MAA000918 MAA000919 MAA000920 MAA000936 MAA100037 MAA100096
  0          2         4        21        52        80        38         1         0
  1          6         7        16        22        21        17         2         0
  10        79         0         0         0         0         0         0         0
  11         3         2         0         0         2         0         0         0
  2          0         1         0         0         0         9         0         0
  3          1         2         0         1         1         0         1         0
  4          0         6        17        12         3        43         0         0
  5          0        18         0         0         2         0         4         0
  6          0         3         8         6         8        16         1         0
  7          2         0         1         8         6         3         1         0
  8          0         0         0         8         8         0        41        28
  9          0         3         1         2         0        17         0         0
    
     MAA100097
  0          0
  1          0
  10         0
  11         0
  2          1
  3          0
  4          0
  5          0
  6          0
  7          0
  8         32
  9          0

Subset and iterate

We can repeat the above analysis on a subset of cells, defined using cluster IDs or some other metadata. This is a good way to drill down and find substructure.

First subset

# Subset data based on cluster id
subtiss <- SubsetData(object = tiss, ident.use = c(6), do.center = F, do.scale = F, cells.use = )
# To subset data based on cell_ontology_class or other metadata, you can explicitly pass cell names
# anno = 'exocrine cells'
# cells.to.use = tiss@cell.names[which(tiss@meta.data$cell_ontology_class == anno)]
# subtiss <- SubsetData(object = tiss, cells.use = cells.to.use, do.center = F, do.scale = F)
subtiss <- NormalizeData(object = subtiss)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
subtiss <- ScaleData(object = subtiss, vars.to.regress = c("nReads", "percent.ribo","Rn45s"))
[1] "Regressing out nReads"       "Regressing out percent.ribo"
[3] "Regressing out Rn45s"       

  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |=                                                                               |   1%
  |                                                                                      
  |==                                                                              |   2%
  |                                                                                      
  |==                                                                              |   3%
  |                                                                                      
  |===                                                                             |   3%
  |                                                                                      
  |===                                                                             |   4%
  |                                                                                      
  |====                                                                            |   5%
  |                                                                                      
  |=====                                                                           |   6%
  |                                                                                      
  |=====                                                                           |   7%
  |                                                                                      
  |======                                                                          |   7%
  |                                                                                      
  |======                                                                          |   8%
  |                                                                                      
  |=======                                                                         |   9%
  |                                                                                      
  |========                                                                        |  10%
  |                                                                                      
  |=========                                                                       |  11%
  |                                                                                      
  |==========                                                                      |  12%
  |                                                                                      
  |==========                                                                      |  13%
  |                                                                                      
  |===========                                                                     |  13%
  |                                                                                      
  |===========                                                                     |  14%
  |                                                                                      
  |============                                                                    |  15%
  |                                                                                      
  |=============                                                                   |  16%
  |                                                                                      
  |=============                                                                   |  17%
  |                                                                                      
  |==============                                                                  |  17%
  |                                                                                      
  |==============                                                                  |  18%
  |                                                                                      
  |===============                                                                 |  19%
  |                                                                                      
  |================                                                                |  20%
  |                                                                                      
  |=================                                                               |  21%
  |                                                                                      
  |==================                                                              |  22%
  |                                                                                      
  |==================                                                              |  23%
  |                                                                                      
  |===================                                                             |  23%
  |                                                                                      
  |===================                                                             |  24%
  |                                                                                      
  |====================                                                            |  25%
  |                                                                                      
  |=====================                                                           |  26%
  |                                                                                      
  |=====================                                                           |  27%
  |                                                                                      
  |======================                                                          |  27%
  |                                                                                      
  |======================                                                          |  28%
  |                                                                                      
  |=======================                                                         |  29%
  |                                                                                      
  |========================                                                        |  30%
  |                                                                                      
  |=========================                                                       |  31%
  |                                                                                      
  |==========================                                                      |  32%
  |                                                                                      
  |==========================                                                      |  33%
  |                                                                                      
  |===========================                                                     |  33%
  |                                                                                      
  |===========================                                                     |  34%
  |                                                                                      
  |============================                                                    |  35%
  |                                                                                      
  |=============================                                                   |  36%
  |                                                                                      
  |=============================                                                   |  37%
  |                                                                                      
  |==============================                                                  |  37%
  |                                                                                      
  |==============================                                                  |  38%
  |                                                                                      
  |===============================                                                 |  39%
  |                                                                                      
  |================================                                                |  40%
  |                                                                                      
  |=================================                                               |  41%
  |                                                                                      
  |==================================                                              |  42%
  |                                                                                      
  |==================================                                              |  43%
  |                                                                                      
  |===================================                                             |  43%
  |                                                                                      
  |===================================                                             |  44%
  |                                                                                      
  |====================================                                            |  45%
  |                                                                                      
  |=====================================                                           |  46%
  |                                                                                      
  |=====================================                                           |  47%
  |                                                                                      
  |======================================                                          |  47%
  |                                                                                      
  |======================================                                          |  48%
  |                                                                                      
  |=======================================                                         |  49%
  |                                                                                      
  |========================================                                        |  50%
  |                                                                                      
  |=========================================                                       |  51%
  |                                                                                      
  |==========================================                                      |  52%
  |                                                                                      
  |==========================================                                      |  53%
  |                                                                                      
  |===========================================                                     |  53%
  |                                                                                      
  |===========================================                                     |  54%
  |                                                                                      
  |============================================                                    |  55%
  |                                                                                      
  |=============================================                                   |  56%
  |                                                                                      
  |=============================================                                   |  57%
  |                                                                                      
  |==============================================                                  |  57%
  |                                                                                      
  |==============================================                                  |  58%
  |                                                                                      
  |===============================================                                 |  59%
  |                                                                                      
  |================================================                                |  60%
  |                                                                                      
  |=================================================                               |  61%
  |                                                                                      
  |==================================================                              |  62%
  |                                                                                      
  |==================================================                              |  63%
  |                                                                                      
  |===================================================                             |  63%
  |                                                                                      
  |===================================================                             |  64%
  |                                                                                      
  |====================================================                            |  65%
  |                                                                                      
  |=====================================================                           |  66%
  |                                                                                      
  |=====================================================                           |  67%
  |                                                                                      
  |======================================================                          |  67%
  |                                                                                      
  |======================================================                          |  68%
  |                                                                                      
  |=======================================================                         |  69%
  |                                                                                      
  |========================================================                        |  70%
  |                                                                                      
  |=========================================================                       |  71%
  |                                                                                      
  |==========================================================                      |  72%
  |                                                                                      
  |==========================================================                      |  73%
  |                                                                                      
  |===========================================================                     |  73%
  |                                                                                      
  |===========================================================                     |  74%
  |                                                                                      
  |============================================================                    |  75%
  |                                                                                      
  |=============================================================                   |  76%
  |                                                                                      
  |=============================================================                   |  77%
  |                                                                                      
  |==============================================================                  |  77%
  |                                                                                      
  |==============================================================                  |  78%
  |                                                                                      
  |===============================================================                 |  79%
  |                                                                                      
  |================================================================                |  80%
  |                                                                                      
  |=================================================================               |  81%
  |                                                                                      
  |==================================================================              |  82%
  |                                                                                      
  |==================================================================              |  83%
  |                                                                                      
  |===================================================================             |  83%
  |                                                                                      
  |===================================================================             |  84%
  |                                                                                      
  |====================================================================            |  85%
  |                                                                                      
  |=====================================================================           |  86%
  |                                                                                      
  |=====================================================================           |  87%
  |                                                                                      
  |======================================================================          |  87%
  |                                                                                      
  |======================================================================          |  88%
  |                                                                                      
  |=======================================================================         |  89%
  |                                                                                      
  |========================================================================        |  90%
  |                                                                                      
  |=========================================================================       |  91%
  |                                                                                      
  |==========================================================================      |  92%
  |                                                                                      
  |==========================================================================      |  93%
  |                                                                                      
  |===========================================================================     |  93%
  |                                                                                      
  |===========================================================================     |  94%
  |                                                                                      
  |============================================================================    |  95%
  |                                                                                      
  |=============================================================================   |  96%
  |                                                                                      
  |=============================================================================   |  97%
  |                                                                                      
  |==============================================================================  |  97%
  |                                                                                      
  |==============================================================================  |  98%
  |                                                                                      
  |=============================================================================== |  99%
  |                                                                                      
  |================================================================================| 100%
[1] "Scaling data matrix"

  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |================================================================================| 100%
subtiss <- FindVariableGenes(object = subtiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.8)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|

subtiss <- RunPCA(object = subtiss, pcs.compute = 20)
[1] "PC1"
 [1] "Postn"    "Vtn"      "Col6a1"   "Pla1a"    "Lrp1"     "Col6a2"   "Slc43a3" 
 [8] "Col3a1"   "Smpdl3a"  "Fabp5"    "Cfh"      "Kdelr3"   "Slc12a2"  "Plat"    
[15] "Lgals3bp" "Nr1h3"    "P2ry14"   "Tppp3"    "Hsd11b1"  "Fn1"      "Tbx20"   
[22] "Spon1"    "Lamb1"    "Gpr182"   "Trib2"    "Fbn1"     "Chn1"     "Asah1"   
[29] "Dusp6"    "Hic1"    
[1] ""
 [1] "Tagln"         "Myh11"         "Nrip2"         "Sorbs2"        "Acta2"        
 [6] "Mustn1"        "Palld"         "Lmod1"         "Rcan2"         "Pln"          
[11] "Wtip"          "Csrp1"         "Pcp4l1"        "Asb2"          "Rasd1"        
[16] "Myl9"          "Sorbs1"        "Perp"          "Ccdc3"         "B230120H23Rik"
[21] "Tpm1"          "Clu"           "Tpm2"          "Gpr20"         "Mylk"         
[26] "Ptrf"          "Ckb"           "Cav1"          "Npy1r"         "Dstn"         
[1] ""
[1] ""
[1] "PC2"
 [1] "Col14a1"  "Loxl1"    "Apoe"     "Fhl1"     "Col6a2"   "Rgs2"     "Col6a1"  
 [8] "Eln"      "Dkk3"     "Fam124a"  "Ptgis"    "Id2"      "Gsn"      "Dpt"     
[15] "Epdr1"    "F2r"      "Cdc42ep3" "Igfbp3"   "Tmem176b" "Adamts2"  "Adh1"    
[22] "Srpx"     "Hsd11b1"  "Cyp1b1"   "Lmcd1"    "Igfbp4"   "Fn1"      "Col8a1"  
[29] "Stc1"     "Col3a1"  
[1] ""
 [1] "Cxcl12"        "Vtn"           "Plxdc1"        "Ldhb"          "P2ry14"       
 [6] "Plxdc2"        "Pcp4l1"        "Ddit4l"        "Opcml"         "Klhl23"       
[11] "Eftud2"        "Chd2"          "Phf17"         "Ppfibp2"       "Igfbp5"       
[16] "Gm20199"       "Slc24a3"       "Pde4c"         "Car2"          "Sema7a"       
[21] "Sdr42e1"       "Osgepl1"       "Gm17066"       "Htr7"          "Ednrb"        
[26] "Bet1l"         "8430406I07Rik" "Astn1"         "Atg16l1"       "2410015M20Rik"
[1] ""
[1] ""
[1] "PC3"
 [1] "Gpbp1l1"       "Dnajb5"        "Gm17066"       "D930016D06Rik" "Tgfbrap1"     
 [6] "1810014F10Rik" "Samd14"        "Med30"         "R74862"        "Cwc25"        
[11] "Trmt5"         "Mocs1"         "1700013N18Rik" "Gm20199"       "Usp33"        
[16] "Pcgf3"         "Ctdsp2"        "Amotl2"        "Rufy3"         "Gemin5"       
[21] "9930104L06Rik" "Vps13a"        "Slc11a2"       "Tgfbr1"        "Chac2"        
[26] "AI480653"      "Vezt"          "Nkd2"          "Zfp408"        "Ints7"        
[1] ""
 [1] "Cd34"          "Ifit1"         "Plat"          "Ifi47"         "Ier2"         
 [6] "Sh2d3c"        "Dusp6"         "Tgtp2"         "Armc10"        "Ly6c1"        
[11] "Gpihbp1"       "Ifit3"         "D0H4S114"      "Snip1"         "Cd274"        
[16] "8430408G22Rik" "Ly6a"          "Plxdc2"        "Eif3d"         "E4f1"         
[21] "Cmpk2"         "Igtp"          "Bcar3"         "Iigp1"         "Tyms"         
[26] "P2ry14"        "Nudt16"        "Mocos"         "Btbd19"        "1500002O20Rik"
[1] ""
[1] ""
[1] "PC4"
 [1] "S1pr3"         "Git1"          "Fbn1"          "Khdrbs3"       "Nt5dc1"       
 [6] "Mknk2"         "Fam168a"       "Lztfl1"        "Xirp1"         "Mt1"          
[11] "Cecr5"         "Spg7"          "Ptdss2"        "Lgals3bp"      "Lars2"        
[16] "Gpam"          "Ubiad1"        "Adnp"          "Fkbp14"        "Ppp2r2d"      
[21] "Magi2"         "Zfp276"        "Mtor"          "Tubgcp4"       "Casp7"        
[26] "BC068281"      "Fyco1"         "9130011E15Rik" "Haus2"         "Tmem170b"     
[1] ""
 [1] "Cdc42ep3" "Gpx3"     "Fbln5"    "Apoe"     "Sdc1"     "Cd36"     "Gstm1"   
 [8] "Cxcl12"   "Chrdl1"   "Lims2"    "Prelp"    "Prss23"   "Lmcd1"    "Adam15"  
[15] "Mafk"     "Enpp2"    "Eya2"     "Lrp4"     "Mfap5"    "Tbxa2r"   "Antxr1"  
[22] "Phactr1"  "Tppp3"    "Ogn"      "Tmem119"  "Fibin"    "Myl9"     "Pdgfd"   
[29] "Fhl1"     "Angptl4" 
[1] ""
[1] ""
[1] "PC5"
 [1] "Chac2"         "Tgfbr1"        "Gm17066"       "Rufy3"         "D930016D06Rik"
 [6] "Tgtp2"         "Zfp1"          "Sc5d"          "Tgfbrap1"      "Twistnb"      
[11] "Znrd1"         "Zfp710"        "Bcl2l2"        "Gm20199"       "Nrd1"         
[16] "Iigp1"         "Psd3"          "Slc25a40"      "Pcgf3"         "1810014F10Rik"
[21] "1700013N18Rik" "Vezt"          "Ppp6r3"        "Cwc25"         "Trmt5"        
[26] "Zfp408"        "Usp5"          "Ifit1"         "Zfx"           "Gpihbp1"      
[1] ""
 [1] "Nme6"          "Man2b2"        "Nrxn1"         "Aard"          "Arrdc4"       
 [6] "Zfp119b"       "Zfp647"        "Nol8"          "Rpap3"         "Osbpl3"       
[11] "Ncoa2"         "Ngfr"          "Ocrl"          "Hipk2"         "Slc30a4"      
[16] "Kcnt2"         "Ephx3"         "Eif4enif1"     "Dnajc21"       "Nr1h4"        
[21] "Phxr4"         "Rxra"          "Cerk"          "A230046K03Rik" "Sfxn4"        
[26] "Tinf2"         "Arfip2"        "Hiatl1"        "Apba3"         "Gon4l"        
[1] ""
[1] ""
subtiss <- ProjectPCA(object = subtiss, do.print = FALSE)

Run Principal Component Analysis.

subtiss <- RunPCA(object = subtiss, do.print = FALSE)
subtiss <- ProjectPCA(object = subtiss, do.print = FALSE)
# If this fails for your subset, it may be that cells.use is more cells than you have left! Try reducing it.
PCHeatmap(object = subtiss, pc.use = 1:3, cells.use = 250, do.balanced = TRUE, label.columns = FALSE, num.genes = 12)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = subtiss)

Choose the number of principal components to use.

# Set number of principal components. 
sub.n.pcs = 5

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

# Set resolution 
sub.res.used <- 1
subtiss <- FindClusters(object = subtiss, reduction.type = "pca", dims.use = 1:sub.n.pcs, 
    resolution = sub.res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
subtiss <- RunTSNE(object = subtiss, dims.use = 1:sub.n.pcs, seed.use = 10, perplexity=25)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = subtiss, do.label = T)

subtiss.markers <- FindAllMarkers(object = subtiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03s          
   |++                                                | 2 % ~03s          
   |++                                                | 3 % ~03s          
   |+++                                               | 4 % ~03s          
   |+++                                               | 5 % ~03s          
   |++++                                              | 6 % ~03s          
   |++++                                              | 7 % ~03s          
   |+++++                                             | 8 % ~02s          
   |+++++                                             | 9 % ~02s          
   |++++++                                            | 10% ~02s          
   |++++++                                            | 11% ~02s          
   |+++++++                                           | 12% ~02s          
   |+++++++                                           | 13% ~02s          
   |++++++++                                          | 14% ~02s          
   |++++++++                                          | 15% ~02s          
   |+++++++++                                         | 16% ~02s          
   |+++++++++                                         | 17% ~02s          
   |++++++++++                                        | 18% ~02s          
   |++++++++++                                        | 19% ~02s          
   |+++++++++++                                       | 20% ~02s          
   |+++++++++++                                       | 21% ~02s          
   |++++++++++++                                      | 22% ~02s          
   |++++++++++++                                      | 23% ~02s          
   |+++++++++++++                                     | 24% ~02s          
   |+++++++++++++                                     | 26% ~02s          
   |++++++++++++++                                    | 27% ~02s          
   |++++++++++++++                                    | 28% ~02s          
   |+++++++++++++++                                   | 29% ~02s          
   |+++++++++++++++                                   | 30% ~02s          
   |++++++++++++++++                                  | 31% ~02s          
   |++++++++++++++++                                  | 32% ~02s          
   |+++++++++++++++++                                 | 33% ~02s          
   |+++++++++++++++++                                 | 34% ~02s          
   |++++++++++++++++++                                | 35% ~02s          
   |++++++++++++++++++                                | 36% ~02s          
   |+++++++++++++++++++                               | 37% ~02s          
   |+++++++++++++++++++                               | 38% ~02s          
   |++++++++++++++++++++                              | 39% ~02s          
   |++++++++++++++++++++                              | 40% ~02s          
   |+++++++++++++++++++++                             | 41% ~02s          
   |+++++++++++++++++++++                             | 42% ~02s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |++++++++++++++++++++++                            | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |+++++++++++++++++++++++                           | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~01s          
   |++++++++++++++++++++++++                          | 48% ~01s          
   |+++++++++++++++++++++++++                         | 49% ~01s          
   |+++++++++++++++++++++++++                         | 50% ~01s          
   |++++++++++++++++++++++++++                        | 51% ~01s          
   |+++++++++++++++++++++++++++                       | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 53% ~01s          
   |++++++++++++++++++++++++++++                      | 54% ~01s          
   |++++++++++++++++++++++++++++                      | 55% ~01s          
   |+++++++++++++++++++++++++++++                     | 56% ~01s          
   |+++++++++++++++++++++++++++++                     | 57% ~01s          
   |++++++++++++++++++++++++++++++                    | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |+++++++++++++++++++++++++++++++                   | 60% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |++++++++++++++++++++++++++++++++++                | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03s          
   |++                                                | 2 % ~03s          
   |++                                                | 3 % ~03s          
   |+++                                               | 4 % ~03s          
   |+++                                               | 5 % ~03s          
   |++++                                              | 6 % ~03s          
   |++++                                              | 8 % ~03s          
   |+++++                                             | 9 % ~03s          
   |+++++                                             | 10% ~03s          
   |++++++                                            | 11% ~02s          
   |++++++                                            | 12% ~02s          
   |+++++++                                           | 13% ~02s          
   |+++++++                                           | 14% ~02s          
   |++++++++                                          | 15% ~02s          
   |+++++++++                                         | 16% ~02s          
   |+++++++++                                         | 17% ~02s          
   |++++++++++                                        | 18% ~02s          
   |++++++++++                                        | 19% ~02s          
   |+++++++++++                                       | 20% ~02s          
   |+++++++++++                                       | 22% ~02s          
   |++++++++++++                                      | 23% ~02s          
   |++++++++++++                                      | 24% ~02s          
   |+++++++++++++                                     | 25% ~02s          
   |+++++++++++++                                     | 26% ~02s          
   |++++++++++++++                                    | 27% ~02s          
   |++++++++++++++                                    | 28% ~02s          
   |+++++++++++++++                                   | 29% ~02s          
   |++++++++++++++++                                  | 30% ~02s          
   |++++++++++++++++                                  | 31% ~02s          
   |+++++++++++++++++                                 | 32% ~02s          
   |+++++++++++++++++                                 | 33% ~02s          
   |++++++++++++++++++                                | 34% ~02s          
   |++++++++++++++++++                                | 35% ~02s          
   |+++++++++++++++++++                               | 37% ~02s          
   |+++++++++++++++++++                               | 38% ~02s          
   |++++++++++++++++++++                              | 39% ~02s          
   |++++++++++++++++++++                              | 40% ~02s          
   |+++++++++++++++++++++                             | 41% ~02s          
   |+++++++++++++++++++++                             | 42% ~02s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |+++++++++++++++++++++++                           | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |++++++++++++++++++++++++                          | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |+++++++++++++++++++++++++                         | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~01s          
   |++++++++++++++++++++++++++                        | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 53% ~01s          
   |+++++++++++++++++++++++++++                       | 54% ~01s          
   |++++++++++++++++++++++++++++                      | 55% ~01s          
   |++++++++++++++++++++++++++++                      | 56% ~01s          
   |+++++++++++++++++++++++++++++                     | 57% ~01s          
   |++++++++++++++++++++++++++++++                    | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |+++++++++++++++++++++++++++++++                   | 60% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |++++++++++++++++++++++++++++++++++                | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~06s          
   |++                                                | 2 % ~05s          
   |++                                                | 3 % ~05s          
   |+++                                               | 4 % ~05s          
   |+++                                               | 5 % ~05s          
   |++++                                              | 6 % ~05s          
   |++++                                              | 7 % ~05s          
   |+++++                                             | 8 % ~05s          
   |+++++                                             | 9 % ~05s          
   |++++++                                            | 11% ~05s          
   |++++++                                            | 12% ~05s          
   |+++++++                                           | 13% ~05s          
   |+++++++                                           | 14% ~05s          
   |++++++++                                          | 15% ~05s          
   |++++++++                                          | 16% ~05s          
   |+++++++++                                         | 17% ~05s          
   |+++++++++                                         | 18% ~05s          
   |++++++++++                                        | 19% ~05s          
   |++++++++++                                        | 20% ~05s          
   |+++++++++++                                       | 21% ~05s          
   |++++++++++++                                      | 22% ~05s          
   |++++++++++++                                      | 23% ~05s          
   |+++++++++++++                                     | 24% ~05s          
   |+++++++++++++                                     | 25% ~04s          
   |++++++++++++++                                    | 26% ~04s          
   |++++++++++++++                                    | 27% ~04s          
   |+++++++++++++++                                   | 28% ~04s          
   |+++++++++++++++                                   | 29% ~04s          
   |++++++++++++++++                                  | 31% ~04s          
   |++++++++++++++++                                  | 32% ~04s          
   |+++++++++++++++++                                 | 33% ~04s          
   |+++++++++++++++++                                 | 34% ~04s          
   |++++++++++++++++++                                | 35% ~04s          
   |++++++++++++++++++                                | 36% ~04s          
   |+++++++++++++++++++                               | 37% ~04s          
   |+++++++++++++++++++                               | 38% ~04s          
   |++++++++++++++++++++                              | 39% ~04s          
   |++++++++++++++++++++                              | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |++++++++++++++++++++++                            | 42% ~03s          
   |++++++++++++++++++++++                            | 43% ~03s          
   |+++++++++++++++++++++++                           | 44% ~03s          
   |+++++++++++++++++++++++                           | 45% ~03s          
   |++++++++++++++++++++++++                          | 46% ~03s          
   |++++++++++++++++++++++++                          | 47% ~03s          
   |+++++++++++++++++++++++++                         | 48% ~03s          
   |+++++++++++++++++++++++++                         | 49% ~03s          
   |++++++++++++++++++++++++++                        | 51% ~03s          
   |++++++++++++++++++++++++++                        | 52% ~03s          
   |+++++++++++++++++++++++++++                       | 53% ~03s          
   |+++++++++++++++++++++++++++                       | 54% ~03s          
   |++++++++++++++++++++++++++++                      | 55% ~03s          
   |++++++++++++++++++++++++++++                      | 56% ~03s          
   |+++++++++++++++++++++++++++++                     | 57% ~03s          
   |+++++++++++++++++++++++++++++                     | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |++++++++++++++++++++++++++++++                    | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |++++++++++++++++++++++++++++++++                  | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |++++++++++++++++++++++++++++++++++                | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 06s
subtiss.markers %>% group_by(cluster) %>% top_n(6, avg_diff)

Check expression of genes of interset.

genes_to_check = c('Kcnj8','Postn','Myh11','Cnn1')
FeaturePlot(subtiss, genes_to_check, pt.size = 1)

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

# To change the y-axis to show raw counts, add use.raw = T.
DotPlot(subtiss, genes_to_check, plot.legend = T)

How big are the clusters?

table(subtiss@ident)

  0   1   2 
106  71  44 

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = subtiss, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(subtiss@ident), as.character(subtiss@meta.data$plate.barcode))
   
    B000412 B000633 B000634 B000636 B002010 B002011 B002421 B002423 B002427 B002428
  0       3       1       3       2       0       0       6       6       4       3
  1       2       7       0       0       1       0       0       2       1       0
  2       1       2       1       0       4       2       3       1       4       3
   
    B002429 MAA000398 MAA000399 MAA000400 MAA000452 MAA000586 MAA000587 MAA000589
  0       5         5        11         9        12         0         9         4
  1       1         9         0         2         1         7         1         2
  2       1         3         2         0         1         1         2         5
   
    MAA000594 MAA000899 MAA000901 MAA000903 MAA000906 MAA000917 MAA000918 MAA000919
  0         0         0         5         1         0         1         4         4
  1         1         1         1        11         1         1         2         1
  2         1         0         0         2         0         1         2         1
   
    MAA000920 MAA000936 MAA100037
  0         8         0         0
  1         0        16         0
  2         0         0         1

Assigning subcell_ontology_classs

For the subsets, we produce subcell_ontology_classs. These will be written back as metadata in the original object, so we can see all subcell_ontology_classs together.

If some of the clusters you find in the subset deserve additional cell_ontology_class, you can add that right here. Use NA for clusters for which no subcell_ontology_class is needed.

subcluster.ids <- c(0, 1, 2)
subfree_annotation <- c()
subcell_ontology_class <-c("Myofibroblast","Myofibroblast", "Smooth_Muscle_Cells")
subtiss@meta.data[,'subcell_ontology_class'] <- plyr::mapvalues(x = subtiss@ident, from = subcluster.ids, to = subcell_ontology_class)
tiss@meta.data[subtiss@cell.names,'subcell_ontology_class'] <- as.character(subtiss@meta.data$subcell_ontology_class)
TSNEPlot(object = subtiss, do.label = TRUE, pt.size = 0.5, group.by='subcell_ontology_class')

Save the Robject for later

When you save the annotated tissue, please give it a name.

filename = here('00_data_ingest', '04_tissue_robj_generated', 
                     paste0("facs", tissue_of_interest, "_seurat_tiss.Robj"))
print(filename)
[1] "/Users/guangli/Documents/GitHub/tabula-muris/00_data_ingest/04_tissue_robj_generated/facsHeart_seurat_tiss.Robj"
save(tiss, file=filename)

Export the final metadata

So that Biohub can easily combine all your cell_ontology_classs, please export them as a simple csv.

LS0tCnRpdGxlOiAiSGVhcnQgRkFDUyBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKU3BlY2lmeSB0aGUgdGlzc3VlIG9mIGludGVyZXN0LCBydW4gdGhlIGJvaWxlcnBsYXRlIGNvZGUgd2hpY2ggc2V0cyB1cCB0aGUgZnVuY3Rpb25zIGFuZCBlbnZpcm9ubWVudCwgbG9hZCB0aGUgdGlzc3VlIG9iamVjdC4KCmBgYHtyfQp0aXNzdWVfb2ZfaW50ZXJlc3QgPSAiSGVhcnQiCmxpYnJhcnkoaGVyZSkKc291cmNlKGhlcmUoIjAwX2RhdGFfaW5nZXN0IiwgIjAyX3Rpc3N1ZV9hbmFseXNpc19ybWQiLCAiYm9pbGVycGxhdGUuUiIpKQpsb2FkX3Rpc3N1ZV9mYWNzKHRpc3N1ZV9vZl9pbnRlcmVzdCkKYGBgCgpWaXN1YWxpemUgdG9wIGdlbmVzIGluIHByaW5jaXBhbCBjb21wb25lbnRzCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KUENIZWF0bWFwKG9iamVjdCA9IHRpc3MsIHBjLnVzZSA9IDE6MywgY2VsbHMudXNlID0gNTAwLCBkby5iYWxhbmNlZCA9IFRSVUUsIGxhYmVsLmNvbHVtbnMgPSBGQUxTRSwgbnVtLmdlbmVzID0gOCkKYGBgCgpMYXRlciBvbiAoaW4gRmluZENsdXN0ZXJzIGFuZCBUU05FKSB5b3Ugd2lsbCBwaWNrIGEgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBrZWVwaW5nIHRoZSBtYWpvciBkaXJlY3Rpb25zIG9mIHZhcmlhdGlvbiBpbiB0aGUgZGF0YSBhbmQsIGlkZWFsbHksIHN1cHJlc3Npbmcgbm9pc2UuIFRoZXJlIGlzIG5vIGNvcnJlY3QgYW5zd2VyIHRvIHRoZSBudW1iZXIgdG8gdXNlLCBidXQgYSBkZWNlbnQgcnVsZSBvZiB0aHVtYiBpcyB0byBnbyB1bnRpbCB0aGUgcGxvdCBwbGF0ZWF1cy4KCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSB0aXNzKQpgYGAKCkNob29zZSB0aGUgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4KYGBge3J9CiMgU2V0IG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cy4gCm4ucGNzID0gMTAKYGBgCgoKVGhlIGNsdXN0ZXJpbmcgaXMgcGVyZm9ybWVkIGJhc2VkIG9uIGEgbmVhcmVzdCBuZWlnaGJvcnMgZ3JhcGguIENlbGxzIHRoYXQgaGF2ZSBzaW1pbGFyIGV4cHJlc3Npb24gd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIuIFRoZSBMb3V2YWluIGFsZ29yaXRobSBsb29rcyBmb3IgZ3JvdXBzIG9mIGNlbGxzIHdpdGggaGlnaCBtb2R1bGFyaXR5LS1tb3JlIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgZ3JvdXAgdGhhbiBiZXR3ZWVuIGdyb3Vwcy4gVGhlIHJlc29sdXRpb24gcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNjYWxlLi4uaGlnaGVyIHJlc29sdXRpb24gd2lsbCBnaXZlIG1vcmUgY2x1c3RlcnMsIGxvd2VyIHJlc29sdXRpb24gd2lsbCBnaXZlIGZld2VyLgoKRm9yIHRoZSB0b3AtbGV2ZWwgY2x1c3RlcmluZywgYWltIHRvIHVuZGVyLWNsdXN0ZXIgaW5zdGVhZCBvZiBvdmVyLWNsdXN0ZXIuIEl0IHdpbGwgYmUgZWFzeSB0byBzdWJzZXQgZ3JvdXBzIGFuZCBmdXJ0aGVyIGFuYWx5emUgdGhlbSBiZWxvdy4KCmBgYHtyfQojIFNldCByZXNvbHV0aW9uIApyZXMudXNlZCA8LSAwLjUKCnRpc3MgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHRpc3MsIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpuLnBjcywgCiAgICByZXNvbHV0aW9uID0gcmVzLnVzZWQsIHByaW50Lm91dHB1dCA9IDAsIHNhdmUuU05OID0gVFJVRSkKYGBgCgpUbyB2aXN1YWxpemUgCmBgYHtyfQojIElmIGNlbGxzIGFyZSB0b28gc3ByZWFkIG91dCwgeW91IGNhbiByYWlzZSB0aGUgcGVycGxleGl0eS4gSWYgeW91IGhhdmUgZmV3IGNlbGxzLCB0cnkgYSBsb3dlciBwZXJwbGV4aXR5IChidXQgbmV2ZXIgbGVzcyB0aGFuIDEwKS4KdGlzcyA8LSBSdW5UU05FKG9iamVjdCA9IHRpc3MsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCkKYGBgCgpgYGB7cn0KIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgZG8ubGFiZWw9VCB0byBoZWxwIGxhYmVsIGluZGl2aWR1YWwgY2x1c3RlcnMKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ubGFiZWwgPSBUKQpgYGAKCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTh9CgojQ00gbGluZWFnZSBnZW5lcwojZ2VuZXNfdG9fY2hlY2sgPSBjKCdTbG4nLCAnTXlsNycsJ015bDInLCAnVG5uaTMnKQojRmVhdHVyZVBsb3QodGlzcywgZ2VuZXNfdG9fY2hlY2ssIHB0LnNpemUgPSAxLCBuQ29sID0gMykKCiNFREMgbGluZWFnZSBnZW5lcwpnZW5lc190b19jaGVjayA9IGMoJ0NkaDUnLCAnUGVjYW0xJywnVGllMScpCkZlYXR1cmVQbG90KHRpc3MsIGdlbmVzX3RvX2NoZWNrLCBwdC5zaXplID0gMSwgbkNvbCA9IDMpIAoKRmVhdHVyZVBsb3QodGlzcywgZmVhdHVyZXMucGxvdD1jKCdDZGg1JywgJ1BlY2FtMScsJ1RpZTEnKSwgY29scy51c2U9YygiZ3JleSIsImJsdWUiKSxyZWR1Y3Rpb24udXNlPSJ0c25lIikKCiNGYiBsaW5lYWdlIGdlbmVzCiNnZW5lc190b19jaGVjayA9IGMoJ0RjbicsJ0dzbicsJ0NvbDFhMScsICdUY2YyMScpCiNGZWF0dXJlUGxvdCh0aXNzLCBnZW5lc190b19jaGVjaywgcHQuc2l6ZSA9IDEsIG5Db2wgPSAzKSAKCiNTTUMgZ2VuZXMsIGJsb29kL2ltbXVuZSBjZWxsLCBjb25kdWN0aW9uIGNlbGxzIGdlbmVzCiNnZW5lc190b19jaGVjayA9IGMoJ0NvbDNhMScsJ0NhdjEnLCdEY24nLCdTb3g5JywnQzFxYicsJ0ZhYnA0JywnTXloMTEnLCAnVndmJywgJ1RubmkzJywnQ2QzNycsJ1RpZTEnLCdIYmItYjEnKQojRmVhdHVyZVBsb3QodGlzcywgZ2VuZXNfdG9fY2hlY2ssIHB0LnNpemUgPSAxLCBuQ29sID0gMykKCmBgYAoKRG90cGxvdHMgbGV0IHlvdSBzZWUgdGhlIGludGVuc2l0eSBvZiBleHBwcmVzc2lvbiBhbmQgdGhlIGZyYWN0aW9uIG9mIGNlbGxzIGV4cHJlc3NpbmcgZm9yIGVhY2ggb2YgeW91ciBnZW5lcyBvZiBpbnRlcmVzdC4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIFRvIGNoYW5nZSB0aGUgeS1heGlzIHRvIHNob3cgcmF3IGNvdW50cywgYWRkIHVzZS5yYXcgPSBULgpEb3RQbG90KHRpc3MsIGdlbmVzX3RvX2NoZWNrLCBwbG90LmxlZ2VuZCA9IFQpCmBgYAoKSG93IGJpZyBhcmUgdGhlIGNsdXN0ZXJzPwpgYGB7cn0KdGFibGUodGlzc0BpZGVudCkKYGBgCgpXaGljaCBtYXJrZXJzIGlkZW50aWZ5IGEgc3BlY2lmaWMgY2x1c3Rlcj8KCmBgYHtyfQpjbHVzdC5tYXJrZXJzIDwtIEZpbmRNYXJrZXJzKG9iamVjdCA9IHRpc3MsIGlkZW50LjEgPSAwLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCB0aHJlc2gudXNlID0gMC4yNSkKYGBgCgpgYGB7cn0KcHJpbnQoeCA9IGhlYWQoeD0gY2x1c3QubWFya2VycywgbiA9IDEwKSkKYGBgCgpZb3UgY2FuIGFsc28gY29tcHV0ZSBhbGwgbWFya2VycyBmb3IgYWxsIGNsdXN0ZXJzIGF0IG9uY2UuIFRoaXMgbWF5IHRha2Ugc29tZSB0aW1lLgpgYGB7cn0KdGlzcy5tYXJrZXJzIDwtIEZpbmRBbGxNYXJrZXJzKG9iamVjdCA9IHRpc3MsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpgYGAKCkRpc3BsYXkgdGhlIHRvcCBtYXJrZXJzIHlvdSBjb21wdXRlZCBhYm92ZS4KYGBge3J9CiN0aXNzLm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSB0b3Bfbig1LCBhdmdfZGlmZikKYGBgCgojIyBBc3NpZ25pbmcgY2VsbCB0eXBlIGlkZW50aXR5IHRvIGNsdXN0ZXJzCgpBdCBhIGNvYXJzZSBsZXZlbCwgd2UgY2FuIHVzZSBjYW5vbmljYWwgbWFya2VycyB0byBtYXRjaCB0aGUgdW5iaWFzZWQgY2x1c3RlcmluZyB0byBrbm93biBjZWxsIHR5cGVzOgoKYGBge3J9CiMgc3Rhc2ggY3VycmVudCBjbHVzdGVyIElEcwp0aXNzIDwtIFN0YXNoSWRlbnQob2JqZWN0ID0gdGlzcywgc2F2ZS5uYW1lID0gImNsdXN0ZXIuaWRzIikKCiMgZW51bWVyYXRlIGN1cnJlbnQgY2x1c3RlciBJRHMgYW5kIHRoZSBsYWJlbHMgZm9yIHRoZW0KY2x1c3Rlci5pZHMgPC0gYygwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LDEwLDExKQpjZWxsX29udG9sb2d5X2NsYXNzIDwtCiAgYygKICAiZmlicm9ibGFzdCIsCiAgImVuZG90aGVsaWFsIGNlbGwiLAogICJmaWJyb2JsYXN0IiwKICAiZmlicm9ibGFzdCIsCiAgImxldWtvY3l0ZSIsCiAgImVuZG90aGVsaWFsIGNlbGwiLAogICJzbW9vdGggbXVzY2xlIGNlbGwiLAogICJlbmRvY2FyZGlhbCBjZWxsIiwKICAiY2FyZGlhYyBtdXNjbGUgY2VsbCIsCiAgImxldWtvY3l0ZSIsCiAgImVuZG90aGVsaWFsIGNlbGwiLCAgCiAgImVyeXRocm9jeXRlIgogICkKY2VsbF9vbnRvbG9neV9pZCA8LQogIGMoCiAgIkNMOjAwMDAwNTciLAogICJDTDowMDAwMTE1IiwKICAiQ0w6MDAwMDA1NyIsCiAgIkNMOjAwMDAwNTciLAogICJDTDowMDAwNzM4IiwKICAiQ0w6MDAwMDExNSIsCiAgIkNMOjAwMDAxOTIiLAogICJDTDowMDAyMzUwIiwKICAiQ0w6MDAwMDc0NiIsCiAgIkNMOjAwMDA3MzgiLAogICJDTDowMDAwMTE1IiwKICAiQ0w6MDAwMDIzMiIKICApCgp0aXNzQG1ldGEuZGF0YVssJ2ZyZWVfYW5ub3RhdGlvbiddIDwtIE5BCnRpc3NAbWV0YS5kYXRhWywnY2VsbF9vbnRvbG9neV9jbGFzcyddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BpZGVudCwgZnJvbSA9IGNsdXN0ZXIuaWRzLCB0byA9IGNlbGxfb250b2xvZ3lfY2xhc3MpCnRpc3NAbWV0YS5kYXRhWywnY2VsbF9vbnRvbG9neV9pZCddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BpZGVudCwgZnJvbSA9IGNsdXN0ZXIuaWRzLCB0byA9IGNlbGxfb250b2xvZ3lfaWQpCgp0aXNzQG1ldGEuZGF0YVt0aXNzQGNlbGwubmFtZXMsJ2NlbGxfb250b2xvZ3lfY2xhc3MnXSA8LSBhcy5jaGFyYWN0ZXIodGlzc0BtZXRhLmRhdGEkY2VsbF9vbnRvbG9neV9jbGFzcykKdGlzc0BtZXRhLmRhdGFbdGlzc0BjZWxsLm5hbWVzLCdjZWxsX29udG9sb2d5X2lkJ10gPC0gYXMuY2hhcmFjdGVyKHRpc3NAbWV0YS5kYXRhJGNlbGxfb250b2xvZ3lfaWQpCgpUU05FUGxvdChvYmplY3QgPSB0aXNzLCBkby5sYWJlbCA9IFRSVUUsIHB0LnNpemUgPSAwLjUsIGdyb3VwLmJ5PSdjZWxsX29udG9sb2d5X2NsYXNzJykKYGBgCgoKIyMgQ2hlY2tpbmcgZm9yIGJhdGNoIGVmZmVjdHMKCgpDb2xvciBieSBtZXRhZGF0YSwgbGlrZSBwbGF0ZSBiYXJjb2RlLCB0byBjaGVjayBmb3IgYmF0Y2ggZWZmZWN0cy4KYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IHRpc3MsIGRvLnJldHVybiA9IFRSVUUsIGdyb3VwLmJ5ID0gInBsYXRlLmJhcmNvZGUiKQpgYGAKIyMjRmJfMyBhbGwgc2VlbSB0byBiZSBkZXJpdmVkIGZyb20gbW91c2VfMzhfRi4KIyNUU05FUGxvdChvYmplY3QgPSB0aXNzLCBkby5yZXR1cm4gPSBUUlVFLCBncm91cC5ieSA9ICJtb3VzZS5pZCIpCgojIyNFZGMgYWxsIGFyZSBkZXJpdmVkIGZyb20gYW9ydGEuCiMjVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAic3VidGlzc3VlIikKCgpQcmludCBhIHRhYmxlIHNob3dpbmcgdGhlIGNvdW50IG9mIGNlbGxzIGluIGVhY2ggaWRlbnRpdHkgY2F0ZWdvcnkgZnJvbSBlYWNoIHBsYXRlLgoKYGBge3J9CnRhYmxlKGFzLmNoYXJhY3Rlcih0aXNzQGlkZW50KSwgYXMuY2hhcmFjdGVyKHRpc3NAbWV0YS5kYXRhJHBsYXRlLmJhcmNvZGUpKQpgYGAKCgoKIyBTdWJzZXQgYW5kIGl0ZXJhdGUKCldlIGNhbiByZXBlYXQgdGhlIGFib3ZlIGFuYWx5c2lzIG9uIGEgc3Vic2V0IG9mIGNlbGxzLCBkZWZpbmVkIHVzaW5nIGNsdXN0ZXIgSURzIG9yIHNvbWUgb3RoZXIgbWV0YWRhdGEuIFRoaXMgaXMgYSBnb29kIHdheSB0byBkcmlsbCBkb3duIGFuZCBmaW5kIHN1YnN0cnVjdHVyZS4KCiMjIEZpcnN0IHN1YnNldAoKYGBge3J9CiMgU3Vic2V0IGRhdGEgYmFzZWQgb24gY2x1c3RlciBpZApzdWJ0aXNzIDwtIFN1YnNldERhdGEob2JqZWN0ID0gdGlzcywgaWRlbnQudXNlID0gYyg2KSwgZG8uY2VudGVyID0gRiwgZG8uc2NhbGUgPSBGLCBjZWxscy51c2UgPSApCgojIFRvIHN1YnNldCBkYXRhIGJhc2VkIG9uIGNlbGxfb250b2xvZ3lfY2xhc3Mgb3Igb3RoZXIgbWV0YWRhdGEsIHlvdSBjYW4gZXhwbGljaXRseSBwYXNzIGNlbGwgbmFtZXMKCiMgYW5ubyA9ICdleG9jcmluZSBjZWxscycKIyBjZWxscy50by51c2UgPSB0aXNzQGNlbGwubmFtZXNbd2hpY2godGlzc0BtZXRhLmRhdGEkY2VsbF9vbnRvbG9neV9jbGFzcyA9PSBhbm5vKV0KIyBzdWJ0aXNzIDwtIFN1YnNldERhdGEob2JqZWN0ID0gdGlzcywgY2VsbHMudXNlID0gY2VsbHMudG8udXNlLCBkby5jZW50ZXIgPSBGLCBkby5zY2FsZSA9IEYpCgpgYGAKCmBgYHtyfQpzdWJ0aXNzIDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gc3VidGlzcykKc3VidGlzcyA8LSBTY2FsZURhdGEob2JqZWN0ID0gc3VidGlzcywgdmFycy50by5yZWdyZXNzID0gYygiblJlYWRzIiwgInBlcmNlbnQucmlibyIsIlJuNDVzIikpCmBgYAoKYGBge3J9CnN1YnRpc3MgPC0gRmluZFZhcmlhYmxlR2VuZXMob2JqZWN0ID0gc3VidGlzcywgZG8ucGxvdCA9IFRSVUUsIHguaGlnaC5jdXRvZmYgPSBJbmYsIHkuY3V0b2ZmID0gMC44KQpzdWJ0aXNzIDwtIFJ1blBDQShvYmplY3QgPSBzdWJ0aXNzLCBwY3MuY29tcHV0ZSA9IDIwKQpzdWJ0aXNzIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gc3VidGlzcywgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgoKUnVuIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMuCmBgYHtyfQpzdWJ0aXNzIDwtIFJ1blBDQShvYmplY3QgPSBzdWJ0aXNzLCBkby5wcmludCA9IEZBTFNFKQpzdWJ0aXNzIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gc3VidGlzcywgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgpgYGB7cn0KIyBJZiB0aGlzIGZhaWxzIGZvciB5b3VyIHN1YnNldCwgaXQgbWF5IGJlIHRoYXQgY2VsbHMudXNlIGlzIG1vcmUgY2VsbHMgdGhhbiB5b3UgaGF2ZSBsZWZ0ISBUcnkgcmVkdWNpbmcgaXQuClBDSGVhdG1hcChvYmplY3QgPSBzdWJ0aXNzLCBwYy51c2UgPSAxOjMsIGNlbGxzLnVzZSA9IDI1MCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW5zID0gRkFMU0UsIG51bS5nZW5lcyA9IDEyKQpgYGAKCkxhdGVyIG9uIChpbiBGaW5kQ2x1c3RlcnMgYW5kIFRTTkUpIHlvdSB3aWxsIHBpY2sgYSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGtlZXBpbmcgdGhlIG1ham9yIGRpcmVjdGlvbnMgb2YgdmFyaWF0aW9uIGluIHRoZSBkYXRhIGFuZCwgaWRlYWxseSwgc3VwcmVzc2luZyBub2lzZS4gVGhlcmUgaXMgbm8gY29ycmVjdCBhbnN3ZXIgdG8gdGhlIG51bWJlciB0byB1c2UsIGJ1dCBhIGRlY2VudCBydWxlIG9mIHRodW1iIGlzIHRvIGdvIHVudGlsIHRoZSBwbG90IHBsYXRlYXVzLgoKYGBge3J9ClBDRWxib3dQbG90KG9iamVjdCA9IHN1YnRpc3MpCmBgYAoKQ2hvb3NlIHRoZSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLgpgYGB7cn0KIyBTZXQgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzLiAKc3ViLm4ucGNzID0gNQpgYGAKCgpUaGUgY2x1c3RlcmluZyBpcyBwZXJmb3JtZWQgYmFzZWQgb24gYSBuZWFyZXN0IG5laWdoYm9ycyBncmFwaC4gQ2VsbHMgdGhhdCBoYXZlIHNpbWlsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGpvaW5lZCB0b2dldGhlci4gVGhlIExvdXZhaW4gYWxnb3JpdGhtIGxvb2tzIGZvciBncm91cHMgb2YgY2VsbHMgd2l0aCBoaWdoIG1vZHVsYXJpdHktLW1vcmUgY29ubmVjdGlvbnMgd2l0aGluIHRoZSBncm91cCB0aGFuIGJldHdlZW4gZ3JvdXBzLiBUaGUgcmVzb2x1dGlvbiBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2NhbGUuLi5oaWdoZXIgcmVzb2x1dGlvbiB3aWxsIGdpdmUgbW9yZSBjbHVzdGVycywgbG93ZXIgcmVzb2x1dGlvbiB3aWxsIGdpdmUgZmV3ZXIuCgpgYGB7cn0KIyBTZXQgcmVzb2x1dGlvbiAKc3ViLnJlcy51c2VkIDwtIDEKCnN1YnRpc3MgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHN1YnRpc3MsIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpzdWIubi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHN1Yi5yZXMudXNlZCwgcHJpbnQub3V0cHV0ID0gMCwgc2F2ZS5TTk4gPSBUUlVFKQpgYGAKClRvIHZpc3VhbGl6ZSAKYGBge3J9CiMgSWYgY2VsbHMgYXJlIHRvbyBzcHJlYWQgb3V0LCB5b3UgY2FuIHJhaXNlIHRoZSBwZXJwbGV4aXR5LiBJZiB5b3UgaGF2ZSBmZXcgY2VsbHMsIHRyeSBhIGxvd2VyIHBlcnBsZXhpdHkgKGJ1dCBuZXZlciBsZXNzIHRoYW4gMTApLgpzdWJ0aXNzIDwtIFJ1blRTTkUob2JqZWN0ID0gc3VidGlzcywgZGltcy51c2UgPSAxOnN1Yi5uLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0yNSkKYGBgCgpgYGB7cn0KIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgZG8ubGFiZWw9VCB0byBoZWxwIGxhYmVsIGluZGl2aWR1YWwgY2x1c3RlcnMKVFNORVBsb3Qob2JqZWN0ID0gc3VidGlzcywgZG8ubGFiZWwgPSBUKQpgYGAKCmBgYHtyfQpzdWJ0aXNzLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gc3VidGlzcywgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgdGhyZXNoLnVzZSA9IDAuMjUpCmBgYAoKYGBge3J9CnN1YnRpc3MubWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKDYsIGF2Z19kaWZmKQpgYGAKCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCmBgYHtyfQpnZW5lc190b19jaGVjayA9IGMoJ0tjbmo4JywnUG9zdG4nLCdNeWgxMScsJ0NubjEnKQoKRmVhdHVyZVBsb3Qoc3VidGlzcywgZ2VuZXNfdG9fY2hlY2ssIHB0LnNpemUgPSAxKQpgYGAKCkRvdHBsb3RzIGxldCB5b3Ugc2VlIHRoZSBpbnRlbnNpdHkgb2YgZXhwcHJlc3Npb24gYW5kIHRoZSBmcmFjdGlvbiBvZiBjZWxscyBleHByZXNzaW5nIGZvciBlYWNoIG9mIHlvdXIgZ2VuZXMgb2YgaW50ZXJlc3QuCgpgYGB7cn0KIyBUbyBjaGFuZ2UgdGhlIHktYXhpcyB0byBzaG93IHJhdyBjb3VudHMsIGFkZCB1c2UucmF3ID0gVC4KRG90UGxvdChzdWJ0aXNzLCBnZW5lc190b19jaGVjaywgcGxvdC5sZWdlbmQgPSBUKQpgYGAKCkhvdyBiaWcgYXJlIHRoZSBjbHVzdGVycz8KYGBge3J9CnRhYmxlKHN1YnRpc3NAaWRlbnQpCmBgYAoKIyMgQ2hlY2tpbmcgZm9yIGJhdGNoIGVmZmVjdHMKCkNvbG9yIGJ5IG1ldGFkYXRhLCBsaWtlIHBsYXRlIGJhcmNvZGUsIHRvIGNoZWNrIGZvciBiYXRjaCBlZmZlY3RzLgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gc3VidGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicGxhdGUuYmFyY29kZSIpCmBgYAoKUHJpbnQgYSB0YWJsZSBzaG93aW5nIHRoZSBjb3VudCBvZiBjZWxscyBpbiBlYWNoIGlkZW50aXR5IGNhdGVnb3J5IGZyb20gZWFjaCBwbGF0ZS4KCmBgYHtyfQp0YWJsZShhcy5jaGFyYWN0ZXIoc3VidGlzc0BpZGVudCksIGFzLmNoYXJhY3RlcihzdWJ0aXNzQG1ldGEuZGF0YSRwbGF0ZS5iYXJjb2RlKSkKYGBgCgoKCiMjIyBBc3NpZ25pbmcgc3ViY2VsbF9vbnRvbG9neV9jbGFzc3MKCkZvciB0aGUgc3Vic2V0cywgd2UgcHJvZHVjZSBzdWJjZWxsX29udG9sb2d5X2NsYXNzcy4gVGhlc2Ugd2lsbCBiZSB3cml0dGVuIGJhY2sgYXMgbWV0YWRhdGEgaW4gdGhlIG9yaWdpbmFsIG9iamVjdCwgc28gd2UgY2FuIHNlZSBhbGwgc3ViY2VsbF9vbnRvbG9neV9jbGFzc3MgdG9nZXRoZXIuCgpJZiBzb21lIG9mIHRoZSBjbHVzdGVycyB5b3UgZmluZCBpbiB0aGUgc3Vic2V0IGRlc2VydmUgYWRkaXRpb25hbCBjZWxsX29udG9sb2d5X2NsYXNzLCB5b3UgY2FuIGFkZCB0aGF0IHJpZ2h0IGhlcmUuIFVzZSBOQSBmb3IgY2x1c3RlcnMgZm9yIHdoaWNoIG5vIHN1YmNlbGxfb250b2xvZ3lfY2xhc3MgaXMgbmVlZGVkLgoKYGBge3J9CnN1YmNsdXN0ZXIuaWRzIDwtIGMoMCwgMSwgMikKc3ViZnJlZV9hbm5vdGF0aW9uIDwtIGMoKQpzdWJjZWxsX29udG9sb2d5X2NsYXNzIDwtYygiTXlvZmlicm9ibGFzdCIsIk15b2ZpYnJvYmxhc3QiLCAiU21vb3RoX011c2NsZV9DZWxscyIpCgpzdWJ0aXNzQG1ldGEuZGF0YVssJ3N1YmNlbGxfb250b2xvZ3lfY2xhc3MnXSA8LSBwbHlyOjptYXB2YWx1ZXMoeCA9IHN1YnRpc3NAaWRlbnQsIGZyb20gPSBzdWJjbHVzdGVyLmlkcywgdG8gPSBzdWJjZWxsX29udG9sb2d5X2NsYXNzKQoKdGlzc0BtZXRhLmRhdGFbc3VidGlzc0BjZWxsLm5hbWVzLCdzdWJjZWxsX29udG9sb2d5X2NsYXNzJ10gPC0gYXMuY2hhcmFjdGVyKHN1YnRpc3NAbWV0YS5kYXRhJHN1YmNlbGxfb250b2xvZ3lfY2xhc3MpCgpUU05FUGxvdChvYmplY3QgPSBzdWJ0aXNzLCBkby5sYWJlbCA9IFRSVUUsIHB0LnNpemUgPSAwLjUsIGdyb3VwLmJ5PSdzdWJjZWxsX29udG9sb2d5X2NsYXNzJykKYGBgCgojIFNhdmUgdGhlIFJvYmplY3QgZm9yIGxhdGVyCldoZW4geW91IHNhdmUgdGhlIGFubm90YXRlZCB0aXNzdWUsIHBsZWFzZSBnaXZlIGl0IGEgbmFtZS4KCmBgYHtyfQpmaWxlbmFtZSA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJzA0X3Rpc3N1ZV9yb2JqX2dlbmVyYXRlZCcsIAogICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoImZhY3MiLCB0aXNzdWVfb2ZfaW50ZXJlc3QsICJfc2V1cmF0X3Rpc3MuUm9iaiIpKQpwcmludChmaWxlbmFtZSkKc2F2ZSh0aXNzLCBmaWxlPWZpbGVuYW1lKQpgYGAKCgojIEV4cG9ydCB0aGUgZmluYWwgbWV0YWRhdGEKClNvIHRoYXQgQmlvaHViIGNhbiBlYXNpbHkgY29tYmluZSBhbGwgeW91ciBjZWxsX29udG9sb2d5X2NsYXNzcywgcGxlYXNlIGV4cG9ydCB0aGVtIGFzIGEgc2ltcGxlIGNzdi4KCmBgYHtyfQpoZWFkKHRpc3NAbWV0YS5kYXRhKQpgYGAKCgpgYGB7cn0KZmlsZW5hbWUgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICcwM190aXNzdWVfYW5ub3RhdGlvbl9jc3YnLCAKICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHRpc3N1ZV9vZl9pbnRlcmVzdCwgIl9hbm5vdGF0aW9uLmNzdiIpKQp3cml0ZS5jc3YodGlzc0BtZXRhLmRhdGFbLGMoJ3BsYXRlLmJhcmNvZGUnLCdjZWxsX29udG9sb2d5X2NsYXNzJywnY2VsbF9vbnRvbG9neV9pZCcpXSwgZmlsZT1maWxlbmFtZSkKYGBgCgoKCg==